[LeetCode] Find Resultant Array After Removing Anagrams

아르당·2026년 8월 24일

LeetCode

목록 보기
484/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

인덱스가 0부터 시작하는 문자열 배열 words가 주어지고, word[i]는 영어 소문자로 구성된다.
한 번의 작업에, 0 < i < words.length이고 words[i - 1]과 words[i]는 아나그램인 어떤 인덱스 i를 선택하고, words에서 words[i]를 삭제해라. 조건을 만족하는 인덱스를 선택할 수 있는 동안 이 작업을 계속 해라.
모든 작업이 끝난 후에 words를 반환해라. 각 연산에 대한 인덱스를 임의의 순서로 선택해도 동일한 결과가 나올 수 있다.

Example

#1
Input: words = ["abba", "baba", "bbaa", "cd", "cd"]
Output: ["abba", "cd"]
Explanation:
결과 배열을 얻을 수 있는 방법 중 하나는 다음 연산을 따라하는 것이다.

  • words[2] = "bbaa", words[1] = "baba"는 아나그램이라서, 인덱스 2를 선택하고 words[2]를 삭제한다.
    현재 words는 ["abba", "baba", "cd", "cd"]이다.
  • words[1] = "baba", words[0] = "abba"는 아나그램이라서, 인덱스 1을 선택하고 words[1]을 삭제한다.
    현재 words는 ["abba", "cd", "cd"]이다.
  • words[2] = "cd", words[1] = "cd"는 아나그램이라서, 인덱스 2를 선택하고 words[2]를 삭제한다.
    현재 words는 ["abba", "cd"]이다.

더 이상 작업할 수 없어서, ["abba", "cd"]가 최종 답이다.

#2
Input: words = ["a", "b", "c", "d", "e"]
Output: ["a", "b", "c", "d", "e"]
Explanation:
words에서 인접한 두 문자열 중 서로 아나그램인 것이 없어서, 연산을 하지 않는다.

Constraints

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 10
  • words[i]는 영어 소문자로 구성된다.

Solved

class Solution {
    public List<String> removeAnagrams(String[] words) {
        List<String> result = new ArrayList<>();
        String s = "";

        for(String word : words){
            char[] c = word.toCharArray();
            Arrays.sort(c);
            String temp = new String(c);

            if(!temp.equals(s)){
                result.add(word);
                s = temp;
            }
        }

        return result;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글