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 ' '设置一个ch记录当前的ch,一个count记录当前的ch重复几遍,一个index记录当前遍历的位置。对于hasnext,如果index<string.length或者count>0说明有下一个,返回true。对于next,先判断有没有下一个,没有返回‘ ’,有的话判断当前ch返回完没有,没有返回ch,返回完记录下一个字母。代码如下:
public class StringIterator {
char[] chs;
int index;
int num;
char ch;
public StringIterator(String compressedString) {
chs = compressedString.toCharArray();
index = 0;
num = 0;
}
public char next() {
if (hasNext()) {
if (num == 0) {
ch = chs[index ++];
while (index < chs.length && chs[index] >= '0' && chs[index] <= '9') {
num = num * 10 + chs[index] - '0';
index ++;
}
num --;
return ch;
} else {
num --;
return ch;
}
}
return ' ';
}
public boolean hasNext() {
return index < chs.length || num > 0? true: false;
}
}
/**
* Your StringIterator object will be instantiated and called as such:
* StringIterator obj = new StringIterator(compressedString);
* char param_1 = obj.next();
* boolean param_2 = obj.hasNext();
*/