leetcode 算法题604 (简单154) 迭代压缩字符串
- 题目介绍
对于一个压缩字符串,设计一个数据结构,
它支持如下两种操作: next 和 hasNext。
给定的压缩字符串格式为:
每个字母后面紧跟一个正整数,这个整数表示该字母在解压后的字符串里连续出现的次数。
next() - 如果压缩字符串仍然有字母未被解压,则返回下一个字母,否则返回一个空格。
hasNext() - 判断是否还有字母仍然没被解压。
注意:
请记得将你的类在 StringIterator 中 初始化 ,
因为静态变量或类变量在多组测试数据中不会被自动清空。
- 示例
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(); // 返回 ’ ’
- 解法一
/**
* @param {string} compressedString
*/
var StringIterator = function(compressedString) {
let i = count = 0, number = '', list = [];
while(i < compressedString.length) {
if(isNumber(compressedString.charCodeAt(i))) {
number += compressedString[i];
} else {
if(number) {
list.push(number);
number = '';
}
list.push(compressedString[i]);
}
i++;
}
if(number) {
list.push(number);
}
this.list = list;
};
const isNumber = code => {
return code >= 47 && code <= 57;
}
const stringNumberReduc = number => {
let i = number.length - 1, flag = true, str = '';
while(i >= 0) {
if(!flag) {
str = number[i] + str;
} else {
if(i === 0 && flag && number[i] === '1') {
return str || '0';
}
if(number[i] === '0') {
str = '9' + str;
} else {
str = parseInt(number[i]) - 1 + str;
flag = false;
}
}
i--;
}
return str;
}
/**
* @return {character}
*/
StringIterator.prototype.next = function() {
let list = this.list;
if(list.length === 0) {
return ' ';
}
let s = list[0];
list[1] = stringNumberReduc(list[1]);
if(list[1] === '0') {
list.shift();
list.shift();
}
return s;
};
/**
* @return {boolean}
*/
StringIterator.prototype.hasNext = function() {
return this.list.length > 0;
};
/**
* Your StringIterator object will be instantiated and called as such:
* var obj = new StringIterator(compressedString)
* var param_1 = obj.next()
* var param_2 = obj.hasNext()
*/
执行用时 : 100 ms, 在所有 JavaScript 提交中击败了100.00%的用户
内存消耗 : 38.9 MB, 在所有 JavaScript 提交中击败了100.00%的用户