JavaScript 中相似的字串組


如果我們可以交換 str1 的兩個字母(在不同的位置)以使其等於 str2,則這兩個字串 str1 和 str2 是相似的。此外,如果兩個字串 str1 和 str2 相等,也是相似的。

例如,“tars”和“rats”是相似的(在位置 0 和 2 處交換),並且“rats”和“arts”是相似的,但“star”與“tars”、“rats”或“arts”不相等。

總之,這些形式透過相似性形成兩個相連的組:{"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

更新於: 2021-01-20

331 次瀏覽

開始你的 職業

完成課程獲得證書

開始學習
廣告