首页 > 代码库 > [leetcode-604-Design Compressed String Iterator]

[leetcode-604-Design Compressed String Iterator]

Design and implement a data structure for a compressed string iterator. It should support the following operations: next and hasNext.

The given compressed string will be in the form of each letter followed by a positive integer representing the number of this letter existing in the original uncompressed string.

next() - if the original string still has uncompressed characters, return the next letter; Otherwise return a white space.
hasNext() - Judge whether there is any letter needs to be uncompressed.

Note:
Please remember to RESET your class variables declared in StringIterator, as static/class variables are persisted across multiple test cases. Please see here for more details.

Example:

StringIterator iterator = new StringIterator("L1e2t1C1o1d1e1");

iterator.next(); // return ‘L‘
iterator.next(); // return ‘e‘
iterator.next(); // return ‘e‘
iterator.next(); // return ‘t‘
iterator.next(); // return ‘C‘
iterator.next(); // return ‘o‘
iterator.next(); // return ‘d‘
iterator.hasNext(); // return true
iterator.next(); // return ‘e‘
iterator.hasNext(); // return false
iterator.next(); // return ‘ ‘

 

思路:

需要注意的是,数字可能是大于10的也就是说不一定是一位数。。。

参考了大神的代码。。

class StringIterator {
  string a;
  size_t i = 0, c = 0;
  char ch;
public:
  StringIterator(string a) {
    this->a = a;
  }

  char next() {
    if (c)
      return c--, ch;
    if (i >= a.size())
      return  ;
    ch = a[i++];
    while (i < a.size() && isdigit(a[i]))
      c = c*10+a[i++]-0;
    c--;
    return ch;
  }

  bool hasNext() {
    return c || i < a.size();
  }
};

参考:

https://leetcode.com/maskray/

[leetcode-604-Design Compressed String Iterator]