分享一道字符串编程题目:
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;
}