Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 改进的游程编码算法_Javascript_String_Algorithm_Encoding_Run Length Encoding - Fatal编程技术网

Javascript 改进的游程编码算法

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 "";

我有一个关于游程编码的字符串面试问题,我的答案是O(n)。有什么办法可以改进吗:

  • 输入为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方面进行改进,但看起来不可能,而且这个解决方案看起来更优雅