Computer >> Máy Tính >  >> Lập trình >> Javascript

Các nhóm chuỗi tương tự trong JavaScript

Hai chuỗi str1 và str2 tương tự nhau nếu chúng ta có thể hoán đổi hai chữ cái (ở các vị trí khác nhau) của str1, sao cho nó bằng str2. Ngoài ra, hai chuỗi str1 và str2 tương tự nhau nếu chúng bằng nhau.

Ví dụ:"tars" và "mouse" tương tự nhau (hoán đổi vị trí 0 và 2), và "mouse" và "Arts" tương tự, nhưng "star" không tương tự với "tars", "mouse" hoặc " nghệ thuật ".

Cùng với nhau, những nhóm này tạo thành hai nhóm được kết nối với nhau theo điểm giống nhau:{"tars", "Mouse", "Arts"} và {"star"}. Lưu ý rằng "tars" và "Arts" ở cùng một nhóm mặc dù chúng không giống nhau.

Về mặt hình thức, mỗi nhóm sao cho một từ nằm trong nhóm nếu và chỉ khi nó giống với ít nhất một từ khác trong nhóm.

Đưa ra một danh sách arr các chuỗi trong đó mọi chuỗi trong arr là một phép đảo chữ của mọi chuỗi khác trong arr. Chúng tôi bắt buộc phải viết một hàm để tìm ra có bao nhiêu nhóm.

Ví dụ

Sau đây là mã -

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));

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

2