我写了一个函数来查找字符串数组中的回文。起初我循环遍历数组并检查每个项目,看看它是否是一个带辅助函数的回文结构,它检查数组中每个索引处的单词(字母) - 这将是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
答案 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)
。