Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

กลุ่มสตริงที่คล้ายกันใน 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