根据标题,我需要找到两个字符串之间的公共子字符串,它长于1个字符(所以一个字符长的不算)。
我尝试首先比较两个字符串,如果它们的字符匹配,则返回true。 否则返回false。 到目前为止,我得到了这个代码:
function SubstringTest(str1, str2){
for ( let i = 0; i < str1.length; i++) {
for (let j = 0; j < str2.length; j++) {
if ((str1[i]) === (str2[j])) {
return true
} else {
return false
}
}
}
}
SubstringTest("something", "home")
但我不明白为什么不起作用。 谁能告诉我正确的方向吗? 谢了。
这是一个残酷的,非最优的解决方案:
null
let commonSubstring = (str1, str2, minLen=1) => {
let best = { len: 0, off1: null, off2: null };
for (let off1 = 0; off1 < str1.length - minLen; off1++) {
for (let off2 = 0; off2 < str2.length - minLen; off2++) {
// Holds the number of characters that match
let maxLen = Math.min(str1.length - off1, str2.length - off2);
let len = 0;
while (len < maxLen && str1[off1 + len] === str2[off2 + len]) len++;
// Store this result if it's the best yet
if (len > best.len) best = { len, off1, off2 };
}
}
// We can now assert that str1.slice(best.off1, best.len) === str2.slice(best.off2, best.len)
return best.len >= minLen ? str1.slice(best.off1, best.off1 + best.len) : null;
};
let tests = [
[ 'mustard', 'hustler' ],
[ 'lemon', 'harlem' ],
[ 'marshmallow', 'hollow' ],
[ 'marshmallow', 'marshal' ],
[ 'jefferson', 'jeffery' ]
];
console.log('Examples:');
for (let [ str1, str2 ] of tests) {
console.log(`Strings "${str1}" and "${str2}" share substring "${commonSubstring(str1, str2, 2)}"`);
}
function SubstringTest(str1, str2){
var matchingText = "";
for ( let i = 0; i < str1.length; i++) {
if(str1[i] == str2[i]){
matchingText+= str1[i];
}
}
if(matchingText.length > 0)
return true;
return false;
}