博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 604. Design Compressed String Iterator (设计压缩字符迭代器)$
阅读量:5225 次
发布时间:2019-06-14

本文共 2627 字,大约阅读时间需要 8 分钟。

Design and implement a data structure for a compressed string iterator. It should support the following operations: next and hasNext.

The given compressed string will be in the form of each letter followed by a positive integer representing the number of this letter existing in the original uncompressed string.

next() - if the original string still has uncompressed characters, return the next letter; Otherwise return a white space.

hasNext() - Judge whether there is any letter needs to be uncompressed.

Note:

Please remember to RESET your class variables declared in StringIterator, as static/class variables are persisted across multiple test cases. Please see  for more details.

Example:

StringIterator iterator = new StringIterator("L1e2t1C1o1d1e1");iterator.next(); // return 'L'iterator.next(); // return 'e'iterator.next(); // return 'e'iterator.next(); // return 't'iterator.next(); // return 'C'iterator.next(); // return 'o'iterator.next(); // return 'd'iterator.hasNext(); // return trueiterator.next(); // return 'e'iterator.hasNext(); // return falseiterator.next(); // return ' '

 


题目标签:Design
  这道题目给了我们一个string, string是由一个char 紧接着 一个 正数int 这种重复排列。让我们设计一个迭代器,把每一个字母按照它后面那个数字来print出。
  StringIterator: 当我们创造一个 StringIterator object 的时候,我们要把 这个string 保存好,以便于之后可以call next 和 hasNext。
        我们可以建立两个list, counts 和 letters。 遍历compressedString, 判断这一个char 是不是 letter, 是的话,直接把char 存进letters list。如果这个char 是数字digit 的话,那么我们需要继续往后找,直到找到一个不是数字的char,或者它超出size了。
        因为数字可以是1位,也可以2位或者更多。
 
  Next():当我们存好了letters 和counts, 就利用counts 来return 相对应的char, 每次用完一个char, 要把它的count - 1。如果当这个count = 0 的时候,那么我们需要移动到下一个char。这里我们需要一个cursor_index 来跟踪我们的char。
 
  hasNext():这里只需要判断,如果我们的cursor_index 超出了 任意一个list 的size, 就表示已经用完了所有的char。
 
 

Java Solution:

Runtime beats 86.01% 

完成日期:07/10/2017

关键词:Design

关键点:用两个list和一个cursor来找到char和对应char的count

 

 

1 public class StringIterator  2 { 3     ArrayList
counts; 4 ArrayList
letters; 5 int cursor_index = 0; 6 7 public StringIterator(String compressedString) 8 { 9 counts = new ArrayList<>();10 letters = new ArrayList<>();11 12 for(int i=0; i
counts.size() - 1 )56 return false;57 else // if string is not finished58 return true;59 }60 }61 62 /**63 * Your StringIterator object will be instantiated and called as such:64 * StringIterator obj = new StringIterator(compressedString);65 * char param_1 = obj.next();66 * boolean param_2 = obj.hasNext();67 */

参考资料:N/A

 

LeetCode 算法题目列表 - 

 

转载于:https://www.cnblogs.com/jimmycheng/p/7148268.html

你可能感兴趣的文章
com.fasterxml.jackson.databind.JsonMappingException
查看>>
排序算法(二)
查看>>
Python内置函数(36)——iter
查看>>
HTML标签_1
查看>>
windows自带的可生成各种数据库连接字符串工具打开方法
查看>>
滚动条
查看>>
程序员的自我修养九Windows下的动态链接
查看>>
细说WebSocket - Node篇
查看>>
Extjs控件之 grid打印功能
查看>>
枚举类型(不常用)递归
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
静态变量数组实现LRU算法
查看>>
中文系统 上传file的input显示英文
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>