ID | Title | Difficulty | |
---|---|---|---|
Loading... |
604. Design Compressed String Iterator
Easy
LeetCode
Array, Hash Table, String, Design, Iterator
Problem
Design and implement a data structure for a compressed string iterator. 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.
Implement the StringIterator class:
- next() Returns the next character if the original string still has uncompressed characters, otherwise returns a white space.
- hasNext() Returns true if there is any letter needs to be uncompressed in the original string, otherwise returns false.
Example 1:
Input
["StringIterator", "next", "next", "next", "next", "next", "next", "hasNext", "next", "hasNext"]
[["L1e2t1C1o1d1e1"], [], [], [], [], [], [], [], [], []]
Output
[null, "L", "e", "e", "t", "C", "o", true, "d", true]
Explanation
StringIterator stringIterator = new StringIterator("L1e2t1C1o1d1e1");
stringIterator.next(); // return "L"
stringIterator.next(); // return "e"
stringIterator.next(); // return "e"
stringIterator.next(); // return "t"
stringIterator.next(); // return "C"
stringIterator.next(); // return "o"
stringIterator.hasNext(); // return True
stringIterator.next(); // return "d"
stringIterator.hasNext(); // return True
Constraints:
- 1 <= compressedString.length <= 1000
- compressedString consists of lower-case an upper-case English letters and digits.
- The number of a single character repetitions in compressedString is in the range $[1, 10^9]$
- At most 100 calls will be made to next and hasNext.
Code
class StringIterator {
String str;
char curr;
int count;
int index;
public StringIterator(String compressedString) {
str = compressedString;
curr = ' ';
index = 0;
count = 0;
}
public char next() {
if(!hasNext()) return ' ';
if (count == 0) {
curr = str.charAt(index++);
while (index < str.length() && Character.isDigit(str.charAt(index))) {
count = 10 * count + (str.charAt(index) - '0');
index++;
}
}
count--;
return curr;
}
public boolean hasNext() {
return index < str.length() || count != 0;
}
}
按 <- 键看上一题!
603. Consecutive Available Seats
按 -> 键看下一题!
605. Can Place Flowers