Javascript 改进的游程编码算法
我有一个关于游程编码的字符串面试问题,我的答案是O(n)。有什么办法可以改进吗:Javascript 改进的游程编码算法,javascript,string,algorithm,encoding,run-length-encoding,Javascript,String,Algorithm,Encoding,Run Length Encoding,我有一个关于游程编码的字符串面试问题,我的答案是O(n)。有什么办法可以改进吗: 输入为AABBBCAAEE 假设输出为A2B3C1A2E2 const firstString=(str)=>{ const arr=str.split(“”); 设计数器=1; 让结果=“”; 对于(设i=0;i一种改进方法是不执行拆分。字符串也可索引: let firstString = (str) => { if (str.length <= 0) { return "";
- 输入为AABBBCAAEE
- 假设输出为A2B3C1A2E2
const firstString=(str)=>{
const arr=str.split(“”);
设计数器=1;
让结果=“”;
对于(设i=0;i一种改进方法是不执行拆分。字符串也可索引:
let firstString = (str) => {
if (str.length <= 0) {
return "";
}
const result = [];
result.push(str[0]);
let counter = 1;
for (let i = 1; i < str.length; i++) {
if (result[result.length - 1] === str[i]) {
counter++;
} else {
result.push(counter, str[i]);
counter = 1;
}
}
result.push(counter);
return result.join("");
};
let firstString=(str)=>{
如果(str.length将此方法用于正则表达式:
正则表达式解释:
var str='AABBBCAAEE';
var result=str.replace(/()\2*)/g,函数(匹配){
var[字母]=匹配;
返回`${letter}${match.length}`;
});
console.log(结果);
.as控制台包装{max height:100%!important;top:0;}
您想要实现的是
这个问题有很多解决方法。检查一下:你别无选择,只能看每个字母,所以我认为你不能比O(n)做得更好。你是在寻求改进大O时间的方法吗?还是你也对总体上改进它的方法感兴趣(比如使代码更漂亮、更简洁)?我在试着看看有没有一种方法可以在大的方面改进?你是否知道这个问题的时间复杂度?它仍然是O(n)?@0x499602D2是的,它是O(n)因为这取决于字符串的长度。这种方法更奇特,而不是在复杂性方面的改进。我试图看看有没有办法在大O方面进行改进,但看起来不可能,而且这个解决方案看起来更优雅