Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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_Algorithm - Fatal编程技术网

Javascript 检查回文字符串数组的运行时

Javascript 检查回文字符串数组的运行时,javascript,algorithm,Javascript,Algorithm,我编写了一个函数来查找字符串数组中的回文。首先,我循环遍历数组并检查每个项,看看它是否是一个回文,带有一个helper函数,该函数检查数组中每个索引处的单词(按字母)——这是O(n^2)对吗 然后,我改变了方法,弹出数组(将其视为堆栈),然后检查其中一项是否为回文,并在整个数组中使用array.length执行此操作。这是O(n),对吗 'use strict'; function isTextPalindrome(text) { //this ignores anything other t

我编写了一个函数来查找字符串数组中的回文。首先,我循环遍历数组并检查每个项,看看它是否是一个回文,带有一个helper函数,该函数检查数组中每个索引处的单词(按字母)——这是O(n^2)对吗

然后,我改变了方法,弹出数组(将其视为堆栈),然后检查其中一项是否为回文,并在整个数组中使用array.length执行此操作。这是O(n),对吗

'use strict';

function isTextPalindrome(text) {
//this ignores anything other than letters
  text = text.replace(/[^a-zA-Z]/g, '').toLowerCase();

  // console.log(text);

  if (!text) {
    return "There must be text as an input!";
  }

  var left = 0;
  var right = text.length - 1;

  while (left < right) {
    if (text[left++] !== text[right--]) {
      return false;
    }
  }
  return true;
}

// console.log(isTextPalindrome('race car'));

function palindromesInArray(arr) {
  var popped;
  var count = 0;
  //treat the array as a stack. don't loop through, just pop off one at a time to avoid extra run time cost.  
  while (popped = arr.pop()) {
    if (typeof (popped) !== 'string') {
      return "Only works on strings";
    }
    if (isTextPalindrome(popped)) {
      count++;
    }
  }

  // for (let i = 0; i < arr.length; i++) {
  //   if (typeof (arr[i]) !== 'string') {
  //     return "Only works on strings";
  //   }
  //   if (isTextPalindrome(arr[i])) {
  //     count++;
  //   }
  // }
 return count;
}



console.log(palindromesInArray(['mom', 'race car', 'dad', 'abba', 'redivider', 'noon', 'civic', 'level', 'blah'])) // returns 8
console.log(palindromesInArray(['mom', 'race car', 'dad', 'blah'])); // returns 3
“严格使用”;
函数ISTEXTPAILNDROME(文本){
//这会忽略除字母以外的任何内容
text=text.replace(/[^a-zA-Z]/g',).toLowerCase();
//console.log(文本);
如果(!text){
return“必须有文本作为输入!”;
}
左向量=0;
var right=text.length-1;
while(左<右){
如果(文本[左++]!==文本[右--]){
返回false;
}
}
返回true;
}
//log(isTextPalindrome(‘赛车’);
函数回文数组(arr){
var突然出现;
var计数=0;
//将阵列视为堆栈。不要循环,只需一次弹出一个,以避免额外的运行时成本。
while(popped=arr.pop()){
if(typeof(弹出)!='string'){
return“仅对字符串有效”;
}
if(isTextPalindrome(弹出)){
计数++;
}
}
//for(设i=0;i
检查长度为
m
的字符串的回文是
O(m)

简单地在长度
n
的数组(或堆栈)上循环就是
O(n)


如果最大字符串长度为
n
,则只需执行
O(n^2)
。否则,它是
O(n*m)

现在还不清楚您这里所说的
O(n)
是什么意思(请记住,
O(n)
表示计算量相对于输入长度的增长)。这里不清楚你想算什么


如果
n
是字符串数组中所有字符的长度之和,则两种算法都是
O(n)
。如果你有
n
-字符串的长度和
m
数组中字符串的数量-你有
O(nm)

有趣的。。。我没想到。有没有办法得到这样的函数O(n)?取决于你考虑什么“N”。记住big-oh表示法是最坏的情况,这就是为什么我提到n.hmm的最大长度字符串。假设arr是n?只有当arr为空时才是O(n):)我明白了……否则它将是O(n*m),仍然是线性的?谢谢