LeetCode 604. 迭代压缩字符串

文章目录

    • 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


长按或扫码关注我的公众号,一起加油、一起学习进步!

你可能感兴趣的:(LeetCode)