在Java脚本中给定两个字符串,查找它们是否彼此分开

时间:2018-08-15 17:08:35

标签: javascript

您能帮我用javascript编写一个函数给定两个字符串吗,找出它们是否彼此相距一个例子: (苍白,ple)真实 (苍白)真实 (苍白,捆)真 (苍白,烘烤)假 (面子,事实)错误

2 个答案:

答案 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