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

时间:2015-12-09 01:29:40

标签: javascript algorithm

我写了一个函数来查找字符串数组中的回文。起初我循环遍历数组并检查每个项目,看看它是否是一个带辅助函数的回文结构,它检查数组中每个索引处的单词(字母) - 这将是O(n ^ 2)正确吗? / p>

然后我改变了弹出数组的方法(将其视为堆栈),然后检查是否有一个项目是回文,并在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

2 个答案:

答案 0 :(得分:1)

检查长度为SearchResult的字符串的回文结构为DirectoryEntry

简单地遍历长度为m的数组(或堆栈)为O(m)

如果最大字符串长度为n,则两者仅为O(n)。否则,它是O(n^2)

答案 1 :(得分:1)

目前还不清楚O(n)在这里是什么意思(请记住O(n)表示计算相对于输入长度的增长)。在这里你不清楚你想要数数。

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