?LeetCode刷題實(shí)戰(zhàn)604:迭代壓縮字符串
示例:
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(); //?返回 ’ ’
解題
https://blog.csdn.net/qq_29051413/article/details/108679703
class?StringIterator?{
????private?String res; // 壓縮的字符串;
????private?char?ch = ' '; // 當(dāng)前字符
????private?int?num = 0; // 當(dāng)前字符的剩余數(shù)量
????private?int?ptr = 0;
????public?StringIterator(String s)?{
????????res = s;
????}
????public?char?next()?{
????????// 沒有下一個(gè)字符了
????????if?(!hasNext()) return?' ';
????????// 當(dāng)前字符數(shù)量為 0,但是還有下一個(gè)字符
????????if?(num == 0) {
????????????ch = res.charAt(ptr++); // ch 更新為新的字符,++放在變量后面,屬于先用后加
????????????// 統(tǒng)計(jì)新的字符后面的數(shù)字
????????????while?(ptr < res.length() && Character.isDigit(res.charAt(ptr))) {
????????????????// res.charAt(ptr++) - '0' 等效于字符轉(zhuǎn)數(shù)字
????????????????num = num * 10?+ res.charAt(ptr++) - '0';
????????????}
????????}
????????num--; // 返回一個(gè),數(shù)量減一
????????return?ch;
????}
????public?boolean?hasNext()?{
????????return?ptr != res.length() || num != 0;
????}
}
