문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
인덱스가 0부터 시작하는 문자열 배열 words가 주어지고, word[i]는 영어 소문자로 구성된다.
한 번의 작업에, 0 < i < words.length이고 words[i - 1]과 words[i]는 아나그램인 어떤 인덱스 i를 선택하고, words에서 words[i]를 삭제해라. 조건을 만족하는 인덱스를 선택할 수 있는 동안 이 작업을 계속 해라.
모든 작업이 끝난 후에 words를 반환해라. 각 연산에 대한 인덱스를 임의의 순서로 선택해도 동일한 결과가 나올 수 있다.
#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에서 인접한 두 문자열 중 서로 아나그램인 것이 없어서, 연산을 하지 않는다.
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;
}
}