-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathDesign_Compressed_String_Iterator.py
67 lines (61 loc) · 2.12 KB
/
Design_Compressed_String_Iterator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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 here 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 true
# iterator.next(); // return 'e'
# iterator.hasNext(); // return false
# iterator.next(); // return ' '
class StringIterator:
def __init__(self, compressedString):
self.s = compressedString
self.ptr = 0
self.num = 0
self.len = len(compressedString)
self.char = ""
def next(self):
if not self.hasNext():
return " "
if self.num == 0:
self.char = self.s[self.ptr]
self.ptr = self.ptr + 1
arr = []
while self.ptr < self.len and self.s[self.ptr].isdigit():
arr.append(self.s[self.ptr])
self.ptr += 1
arr = "".join(arr)
self.num = int(arr) - 1
return self.char
else:
self.num -= 1
return self.char
def hasNext(self):
if self.ptr >= self.len and self.num == 0:
return False
return True
# Your StringIterator object will be instantiated and called as such:
# obj = StringIterator(compressedString)
# param_1 = obj.next()
# param_2 = obj.hasNext()