分享一道字符串編程題目:
1. 解決
function abbr(str){
str = str + "*"; // 添加一個結尾標誌,不同於輸入字符串中的任何值即可
let cur = str[0]; // 當前
let pre = cur; // 前一個
let res = ""; // 最終結果
let pad = ""; // 每次增加的
let num = 1; // 計數
for(let i = 1; i < str.length; i++){ // 從1開始
cur = str[i]; // 更新cur
// 判斷決定pad值
if(pre == cur){
num ++;
pad = cur;
}else{
if(num > 1){
pad = num;
}else{
pad = pre;
}
num = 1;
}
res = res + pad; // 加上pad
pre = cur; // 更新pre
}
return res;
}
2. 思考
這個問題其實有一個很大的意義:就是壓縮字符串,減去重複字符。
假如我們有需求:把 aaabbbccccddeeefggg
壓縮成 a3b3c4d2e3fg3
function abbr(str){
str = str + "*"; // 結尾標誌
let cur = str[0]; // 當前
let pre = cur; // 前一個
let res = ""; // 最終結果
let pad = ""; // 每次增加的
let num = 1; // 計數
for(let i = 1; i < str.length; i++){ // 從1開始
cur = str[i]; // 更新cur
// 判斷決定pad值
if(pre == cur){
num ++;
pad = ""; // **修改了這裏**
}else{
if(num > 1){
pad = pre + num; // **修改了這裏**
}else{
pad = pre;
}
num = 1;
}
res = res + pad; // 加上pad
pre = cur; // 更新pre
}
return res;
}