您能帮我用javascript编写一个函数给定两个字符串吗,找出它们是否彼此相距一个例子: (苍白,ple)真实 (苍白)真实 (苍白,捆)真 (苍白,烘烤)假 (面子,事实)错误
答案 0 :(得分:0)
您可以尝试使用此功能来检查字符串是否仅因一次编辑而有所不同。
function checkDifferntString(str1, str2) {
let diff = 0;
if (str1 === str2) return true; // equal return true
let lengthDiff = Math.abs(str1.length - str2.length)
if (lengthDiff > 1) return false; // checks length diff if > 2 return false
for (let i=0; (i<str1.length || i < str2.length);i++) {
if (diff > 1) return false; // diff greater than 1 return false
if (str1.charAt(i) !== str2.charAt(i)) diff++
}
if (diff <= 1) return true
else return false;
}
console.log(checkDifferntString("pale", "pale")) // true
console.log(checkDifferntString("pale", "pales")) // true
console.log(checkDifferntString("pales", "pale")) // true
console.log(checkDifferntString("pales", "bale")) // false
我希望它会有所帮助。谢谢!
答案 1 :(得分:0)
检查一下。
我做了一个简单的函数,它遍历给定的两个字符串,并检查这些字符串之间是否存在超过1个差异(就字符而言),可选参数cs
允许区分大小写,默认情况下等于到false
,因此'a'和'A'相同。
function isEditFrom(str1, str2, cs) {
var cs = cs || false, i = 0, diff = 2, len1 = str1.length, len2 = str2.length, l = (len1 > len2) ? len1: len2;
if(len1 !== 0 && len2 !== 0) {
if(cs === false) {
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
}
for(; i < l; i++) {
if(str1[i] !== str2[i]) {
if(--diff === 0) {
return false;
}
}
}
return true;
} else {
return false;
}
}
现在我们调用该函数:
isEditFrom('Pale', 'bAle'); // returns True
isEditFrom('Pale', 'bAle', true); // returns False as we set the third argument to true enabling case sensitivity, 'a' != 'A'
isEditFrom('face', 'facts'); // returns False