분류 javascript

Javascript 30초 Snippet - String : stringPermutations

컨텐츠 정보

  • 조회 83 (작성일 )

본문

문자열의 모든 순열을 생성합니다 (중복 포함).


https://github.com/30-seconds/30-seconds-of-code#bytesize 


⚠️ 경고 :이 기능의 실행 시간은 각 문자마다 기하급수적으로 증가합니다. 8 ~ 10자를 초과하면 다른 모든 조합을 해결하려고 할 때 브라우저가 중단됩니다.


재귀를 사용하십시오. 주어진 문자열의 각 문자에 대해 나머지 문자에 대한 모든 부분 순열을 만듭니다. 

문자를 각 부분 순열과 결합하려면 Array.prototype.map()을 사용하고 모든 배열을 하나의 배열로 결합하려면 Array.prototype.reduce()를 사용하십시오. 

기본 사례는 문자열 길이가 2 또는 1입니다.


const stringPermutations = str => {
  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
  return str
    .split('')
    .reduce(
      (acc, letter, i) =>
        acc.concat(stringPermutations(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)),
      []
    );
};



ex)


stringPermutations('abc'); // ['abc','acb','bac','bca','cab','cba']