文章目录
- 1. 题目
- 2. 解题
1. 题目
对于一个压缩字符串,设计一个数据结构,它支持如下两种操作: 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
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
长按或扫码关注我的公众号,一起加油、一起学习进步!