我有以下問題陳述:
撰寫一個函式 uncompress,它接受一個字串作為引數。輸入字串將根據以下模式格式化為多個組:
數字 字符
例如,“2c”或“3a”。
該函式應回傳字串的未壓縮版本,其中組的每個“字符”連續重復“數字”次。您可以假設輸入字串按照前面提到的模式格式正確。
test_00:解壓縮(“2c3a1t”);// -> 'ccaaat'
這是我使用堆疊的代碼。問題是它只回傳'cc',我不知道為什么。我已經控制臺記錄了進入 IF ELSE 的內容,并且我都擊中了兩者,所以我不明白為什么沒有任何東西被推入堆疊。
如果有人能發現我遺漏的東西,我將不勝感激。
const uncompress = (s) => {
const nums = '23456789';
const stack = [];
for (let char of s) {
if (nums.includes(char)) {
stack.push(Number(char));
} else {
const num = stack.pop();
stack.push(char.repeat(num));
};
};
return stack.join('');
};
console.log(uncompress("2c3a1t")); // -> 'ccaaat'
uj5u.com熱心網友回復:
這是我的做法:
將字串拆分為成對的數字和字符:
str.match(/\d [a-zA-Z]/g)
并將該陣列簡化為一個字串,同時從陣列中獲取每個值,從中獲取字符(cv.match(/[a-zA-Z]/)[0])并根據數字重復它(.repeat(parseInt(cv)))
const uncompress = str => str.match(/\d [a-zA-Z]/g).reduce((acc, cv) =>
acc cv.match(/[a-zA-Z]/)[0].repeat(parseInt(cv)), "")
console.log(uncompress("2c3a1t"))
console.log(uncompress("27b1d8g"))
uj5u.com熱心網友回復:
就像這樣,我能夠撰寫通過測驗用例的代碼:
const nums = '123456789';
const stack = [];
for (let char of s) {
if (nums.includes(char)) {
stack.push(Number(char));
} else {
let num = '';
while (nums.includes(stack[stack.length - 1])) {
num = stack.pop();
}
stack.push(char.repeat(num));
};
};
return stack.join('');
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418883.html
標籤:
