Design Compressed String Iterator
设计一个runlength压缩后的string的iterator.
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 |
class StringIterator { public: deque<char> v; deque<int> c; StringIterator(string cs) { for(int i = 0; i < cs.length();) { if(i < cs.length() && '0' <= cs[i] && cs[i] <= '9'){ int count = 0; while(i < cs.length() && '0' <= cs[i] && cs[i] <= '9'){ count = (count * 10) + (cs[i] - '0'); i++; } c.push_back(count); }else{ v.push_back(cs[i++]); } } } char next() { if(!hasNext()) return ' '; c[0]--; char vv = v.front(); if(c[0] == 0){ c.pop_front(); v.pop_front(); } return vv; } bool hasNext() { return c.size() != 0 && v.size() != 0; } }; /** * Your StringIterator object will be instantiated and called as such: * StringIterator* obj = new StringIterator(compressedString); * char param_1 = obj->next(); * bool param_2 = obj->hasNext(); */ |