JavaScript 中的相似字符串组

如果我们可以交换 str1 的两个字母(在不同位置),使其等于 str2,那么两个字符串 str1 和 str2 是相似的。此外,如果两个字符串 str1 和 str2 相等,则它们是相似的。

例如,“tars”和“rats”相似(在位置0和2交换),“rats”和“arts”相似,但“star”与“tars”、“rats”或“艺术”。

它们一起通过相似性形成两个连接的组:{"tars", "rats", "arts"} 和 {"star"}。请注意,尽管“tars”和“arts”并不相似,但它们属于同一组。

形式上,每个组都是这样的,当且仅当它与组中的至少一个其他单词相似时,该单词才在该组中。

给定一个字符串列表 arr,其中 arr 中的每个字符串都是 arr 中所有其他字符串的变位词。我们需要编写一个函数来找出有多少组。

示例

以下是代码 -

const arr = ["tars","rats","arts","star"];
const isSimilar = (str1, str2) => {
   const obj = {}
   let counter = 0
   for(let i=0; i< str1.length; i++){
      if(str1[i] !== str2[i]) { counter++ }
         obj[str1[i]] = str2[i]
      }
      return counter === 2? true : false
   }
   const similarStringGroup = (arr = []) => {
      const group = [[arr[0]]]
      for(let i=1; i<arr.length; i++){
         let match = false
         for(let j=0; j<group.length; j++){
            for(let k=0; k< group[j].length; k++){
               const booleanMatch = isSimilar(group[j][k], arr[i])
               if(booleanMatch) {
                  group[j].push(arr[i]);
                  match = true
                  break;
               }
            }
            if(match === true) { break }
         }
         if(match === false){ group.push([arr[i]]) }
      }
      return group.length
}
console.log(similarStringGroup(arr));
输出结果

以下是控制台输出 -

2