题目地址:
https://leetcode.com/problems/design-compressed-string-iterator/
给定一个压缩字符串,格式是字符 + 数字 + 字符 + 数字这样,每个字符后面跟一个数字,表示这个字符重复了多少次。要求设计遍历其的迭代器。如果在hasNext()为false的情况下调用了next(),则返回空格。
将这个字符串按字符 + 数字的小组合分组,依次遍历它们即可。代码如下:
class StringIterator {
private String s;
// idx记录下一组字符+数字这个子串的首字符下标,count记录当前遍历的字符还剩多少个
private int idx, count;
// 记录当前遍历的组合的字符
private char cur;
public StringIterator(String compressedString) {
s = compressedString;
}
public char next() {
if (!hasNext()) {
return ' ';
}
if (count == 0) {
cur = s.charAt(idx);
int j = idx + 1;
while (j < s.length() && Character.isDigit(s.charAt(j))) {
j++;
}
count = Integer.parseInt(s.substring(idx + 1, j));
idx = j;
}
count--;
return cur;
}
public boolean hasNext() {
return idx < s.length() || count > 0;
}
}
所有操作时间复杂度 O ( 1 ) O(1) O(1),空间 O ( 1 ) O(1) O(1)。