文章目录

  • 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 604. 迭代压缩字符串相关推荐

  1. 【LeetCode - 443】压缩字符串(模拟)

    解题报告: 直接模拟. class Solution { public:int compress(vector<char>& chars) {int p = 0;for(int i ...

  2. leetcode初级算法6.字符串转整数(atoi)

    leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法: public int myAtoi(String s) {//避免魔法值先设spaceS ...

  3. 443. 压缩字符串

    443. 压缩字符串 给你一个字符数组 chars ,请使用下述算法压缩: 从一个空字符串 s 开始.对于 chars 中的每组 连续重复字符 : 如果这一组长度为 1 ,则将字符追加到 s 中. 否 ...

  4. LeetCode 583. 两个字符串的删除操作(动态规划)

    1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...

  5. LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)

    1. 题目 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...

  6. Leetcode 712.两个字符串的最小ASCII删除和

    Time: 20190906 Type: Medium 题目描述 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea ...

  7. C++描述 LeetCode 1768. 交替合并字符串

    C++描述 LeetCode 1768. 交替合并字符串   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯 ...

  8. LeetCode——1888. 使二进制字符串字符交替的最少反转次数(Minimum Number of Flips to Make the Binary ...)[中等]——分析及代码(Java)

    LeetCode--1888. 使二进制字符串字符交替的最少反转次数[Minimum Number of Flips to Make the Binary String Alternating][中等 ...

  9. LeetCode 712. 两个字符串的最小ASCII删除和

    LeetCode 712. 两个字符串的最小ASCII删除和 文章目录 LeetCode 712. 两个字符串的最小ASCII删除和 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂 ...

最新文章

  1. MESI缓存一致性协议
  2. pyinstaller 打包selenium脚本 取消cmd
  3. 【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )
  4. android 中的常用组件
  5. CAS单点登录原理简单介绍
  6. pta - 1132 Cut Integer
  7. 玩转算法值面试-第五章 -在链表中穿针引线
  8. 通过opencv的函数进行图片修复:cv2.inpaint()
  9. c语言-命令行选项_全国计算机等级考试二级C语言
  10. mysql 常用命令操作
  11. 互联网金融数据分析-笔记
  12. Spring Cloud Zuul 1(API 网关服务)
  13. 【笔记整理】电磁场复习——麦克斯韦四个方程组
  14. (Macbook Air)BCM4360网卡Linux(Ubuntu/Fedora)驱动安装总结
  15. 如何做一个基于微信驾校考试小程序系统毕业设计毕设作品
  16. 建立一个低成本的工业控制器和树莓Pi 3
  17. 最接近win7的Linux系统,Windows7Vs.Linux——操作系统大PK
  18. AccountManager使用教程
  19. 网管软件在保险行业的应用
  20. Farey sequences

热门文章

  1. **print('人生苦短 我爱Python')**
  2. 【洛谷p1464】 Function
  3. caffe各种依赖包配置
  4. JDK源码包结构分类
  5. python3.5文档
  6. 4个强大的Linux服务器监控工具[转]
  7. protocol(协议) 和 delegate(委托)也叫(代理)---辨析
  8. MySQL中的表压缩功能
  9. Epoll例子的使用
  10. 学模拟电路的神器everycircuit