Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 유사한 문자열 그룹

<시간/>

두 문자열 str1과 str2는 str1의 두 문자(서로 다른 위치에 있음)를 교환하여 str2와 같게 할 수 있는 경우 유사합니다. 또한 두 문자열 str1과 str2는 같으면 비슷합니다.

예를 들어, "tars"와 "rats"는 유사하고(위치 0과 2에서 교체), "rats"와 "arts"는 유사하지만 "star"는 "tars", "rats" 또는 " 예술".

이들은 함께 {"tars", "rats", "arts"} 및 {"star"}의 유사성으로 연결된 두 그룹을 형성합니다. "tar"와 "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