애너그램을 제거한 후 결과 배열 찾기

1705 단어 theabbieleetcodedsa
인덱스가 0인 문자열 배열words이 주어집니다. 여기서 words[i]는 소문자로 구성됩니다.

한 작업에서 i0 < i < words.lengthwords[i - 1]가 애너그램인 인덱스words[i]를 선택하고 words[i]에서 words를 삭제합니다. 조건을 만족하는 인덱스를 선택할 수 있는 한 이 작업을 계속 수행하십시오.

모든 작업을 수행한 후 words를 반환합니다. 임의의 순서로 각 작업에 대한 인덱스를 선택하면 동일한 결과가 나온다는 것을 알 수 있습니다.

애너그램은 모든 원래 문자를 정확히 한 번 사용하여 다른 단어나 구의 문자를 재배열하여 형성된 단어나 구입니다. 예를 들어, "dacb""abdc"의 애너그램입니다.

예 1:

입력: words = ["abba","baba","bbaa","cd","cd"]
출력: ["abba","cd"]
설명:
결과 배열을 얻을 수 있는 방법 중 하나는 다음 작업을 사용하는 것입니다.
  • words[2] = "bbaa"및 words[1] = "baba"는 애너그램이므로 인덱스 2를 선택하고 words[2]를 삭제합니다.
    이제 단어 = ["abba","baba","cd","cd"].
  • words[1] = "baba"및 words[0] = "abba"는 애너그램이므로 인덱스 1을 선택하고 words[1]을 삭제합니다.
    이제 단어 = ["abba","cd","cd"].
  • words[2] = "cd"및 words[1] = "cd"는 애너그램이므로 인덱스 2를 선택하고 words[2]를 삭제합니다.
    이제 단어 = ["abba","cd"].
    더 이상 작업을 수행할 수 없으므로 ["abba","cd"]가 최종 답입니다.

  • 예 2:

    입력: 단어 = ["a","b","c","d","e"]
    출력: ["a","b","c","d","e"]
    설명:
    단어에서 인접한 두 문자열은 서로의 애너그램이 아니므로 작업이 수행되지 않습니다.

    제약:
  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 10
  • words[i] 영문 소문자로 구성되어 있습니다.

  • 해결책:

    class Solution:
        def removeAnagrams(self, words: List[str]) -> List[str]:
            stack = []
            for w in words:
                if len(stack) == 0 or sorted(w) != sorted(stack[-1]):
                    stack.append(w)
            return stack
    

    좋은 웹페이지 즐겨찾기