Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.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 比较字符串时的字符串方法与数组方法(大O)_Javascript_Arrays_String_Performance_Big O - Fatal编程技术网

Javascript 比较字符串时的字符串方法与数组方法(大O)

Javascript 比较字符串时的字符串方法与数组方法(大O),javascript,arrays,string,performance,big-o,Javascript,Arrays,String,Performance,Big O,假设我们正在比较两个字符串,这两个字符串有一个特殊的字符,它会导致一些不寻常的事情发生——在本例中,#字符删除前面的字符 这里有一个解决方案,使用字符串方法slice和concat,构建字符串,然后对它们进行比较: const checkSame = (a, b) => { let one = '' for(let i = 0; i < a.length; i++){ if(a[i] === '#'){ one.slice(0, -1) } els

假设我们正在比较两个字符串,这两个字符串有一个特殊的字符,它会导致一些不寻常的事情发生——在本例中,
#
字符删除前面的字符

这里有一个解决方案,使用字符串方法
slice
concat
,构建字符串,然后对它们进行比较:

const checkSame = (a, b) => {
  let one = ''
  for(let i = 0; i < a.length; i++){
    if(a[i] === '#'){
      one.slice(0, -1)
    } else {
      one.concat(a[i]);
    }
  }
  let two = ''
  for(let i = 0; i < b.length; i++){
    if(b[i] === '#'){
      one.slice(0, -1)
    } else {
      one.concat(b[i]);
    }
  }
  return one === two
};
第二个解决方案使用了一个额外的循环,这使我认为,如果给定一个
n
字符字符串,则需要
O(3n)
时间(最坏情况),而第一个只需要
O(2n)
时间

这是正确的吗?串接和切分字符串是否比使用数组更有效?或者,随着字符串长度的增长,两个字符串的最终比较是否也需要
n
时间?

O(3n)~O(2n)~O(n)
因此,这两个字符串的最坏情况复杂性基本相同

参考:

export const compareTwoStrings2 = (a, b) => {
  let one = [];
  for (let i = 0; i < a.length; i++) {
    if (a[i] === "#") {
      one.pop();
    } else {
      one.push(a[i]);
    }
  }
  let two = [];
  for (let i = 0; i < b.length; i++) {
    if (b[i] === "#") {
      two.pop();
    } else {
      two.push(b[i]);
    }
  }
  for(let i = 0; i < one.length; i++){
      if(one[i] !== two[i]) return false;
  }
  return true;
};