leetcode 알고리즘 문제 604 (간단 154) 반복 압축 문자열

leetcode 알고리즘 문제 604 (간단 154) 반복 압축 문자열
제목 소개
         ,        ,
         : next   hasNext。
           :
               ,                         。
  next() -                 ,        ,        。
  hasNext() -               。

  :
           StringIterator       ,
                           。


예시
StringIterator iterator = new StringIterator(“L1e2t1C1o1d1e1”); iterator.next(); // "L" iterator. next (); /"e" iterator. next (); /"e" iterator. next (); /'t' iterator. next (); /"C" iterator. next (); /'o' iterator. next (); /"d" iterator. hasNext (); /true iterator. next (); /"e" iterator. hasNext (); /false iterator. next (); /되돌아오다
해법
/**
 * @param {string} compressedString
 */
var StringIterator = function(compressedString) {
  let i = count = 0, number = '', list = [];
  while(i < compressedString.length) {
    if(isNumber(compressedString.charCodeAt(i))) {
      number += compressedString[i];
    } else {
      if(number) {
        list.push(number);
        number = '';
      }
      list.push(compressedString[i]);
    }
    i++;
  }
  if(number) {
    list.push(number);
  }
  this.list = list;
};

const isNumber = code => {
  return code >= 47 && code <= 57;
}

const stringNumberReduc = number => {
  let i = number.length - 1, flag = true, str = '';
  while(i >= 0) {
    if(!flag) {
      str = number[i] + str;
    } else {
      if(i === 0 && flag && number[i] === '1') {
        return str || '0';
      }
      if(number[i] === '0') {
         str = '9' + str;
      } else {
         str = parseInt(number[i]) - 1 + str;
         flag = false;
      }
    }
    i--;
  }
  return str;
}

/**
 * @return {character}
 */
StringIterator.prototype.next = function() {
  let list = this.list;
  if(list.length === 0) {
    return ' ';
  }
  let s = list[0];
  list[1] = stringNumberReduc(list[1]);
  if(list[1] === '0') {
    list.shift();
    list.shift();
  }
  return s;
};


/**
 * @return {boolean}
 */
StringIterator.prototype.hasNext = function() {
    return this.list.length > 0;
};

/** 
 * Your StringIterator object will be instantiated and called as such:
 * var obj = new StringIterator(compressedString)
 * var param_1 = obj.next()
 * var param_2 = obj.hasNext()
 */

실행 시: 100 ms, 모든 자 바스 크 립 트 제출 중 100.00% 사용 자 를 격파
메모리 소모: 38.9MB, 모든 JavaScript 제출 중 100.00% 사용 자 를 격파

좋은 웹페이지 즐겨찾기