我有阵列:
let arr = ["logerror", "log:today", "log:1"]
我正在寻找函数如何从这些项中获取最长的子字符串。
结果:
log
另一个例子:
let arr = ["dog+ěě+", "dog15qwqqq", "dogggggg"]
结果:
dog
当然,我可以编写一些算法,但有什么简单的方法吗?
如何?感谢
答案 0 :(得分:3)
如果您可以简洁地表达您的问题,您通常可以找到要搜索的内容。在这种情况下,它看起来像:
"从字符串数组中找到最长的公共子字符串"
快速谷歌揭示了一种用于查找两个字符串之间最大公共子字符串的算法:
https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring
我不想复制那里写的代码,因为不知道版权,但你可以采取实施并采取适合你的阵列的东西。
我会注意到,对于大型阵列,这可能会成为一个漫长的操作......
答案 1 :(得分:1)
我使用了一种简单的方法:
使用array
方法对sort()
进行排序。
然后,最重要的一步是查看第一个和最后一个项目。
function commonSubsequence(array){
let sortedArray = array.sort();
let first = sortedArray[0];
let last = sortedArray.pop();
let length = first.length;
let index = 0;
while(index<length && first[index] === last[index])
index++;
return first.substring(0, index);
}
console.log(commonSubsequence(["logerror", "log:today", "log:1"]));
console.log(commonSubsequence(["dog+ěě+", "dog15qwqqq", "dogggggg"]));
答案 2 :(得分:1)
这是我的建议
function subStrArr(arr) {
let chars = arr[0].split(""), sub = "";
for (let i=0;i<chars.length;i++) {
for (let j=1;j<arr.length;j++) {
if (arr[j].indexOf(chars[i])==-1) return sub;
}
sub+=chars[i];
}
}
let arr1 = ["logerror", "log:today", "log:1"];
let arr2 = ["dog+ěě+", "dog15qwqqq", "dogggggg"];
console.log(subStrArr(arr1))
console.log(subStrArr(arr2))
答案 3 :(得分:0)
经过一番环顾之后,我选择了string-algorithms npm软件包,对我来说做得很好。
从文档中
import { longestCommonSubstring } from 'string-algorithms';
const strings = [
'12apple',
'3apple4',
'apple56'
];
console.log(longestCommonSubstring(strings));
产生输出苹果。