对于一个压缩字符串,设计一个数据结构,它支持如下两种操作: 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(); // 返回 ' '
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-compressed-string-iterator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class StringIterator {
string s;
char cur;
int count = 0, idx = 0;
public:
StringIterator(string compressedString) {
s = compressedString;
}
char next() {
if(!hasNext()) return ' ';
if(count>0)
{
count--;
return cur;
}
else//count=0
{
cur = s[idx];
idx++;
while(idx < s.size() && isdigit(s[idx]))
count = count*10+(s[idx++]-'0');
count--;//用掉了一个
return cur;
}
}
bool hasNext() {
return idx < s.size()||count;
}
};
20 ms 13.3 MB