문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
소문자 알파벳 범위인 ascii['a'..'z']의 문자열을 일련의 작업을 통해 줄여라. 각 작업에서 일치하고 인접하는 문자를 선택하고 삭제해라.
이 방법으로 가능한 많은 문자를 삭제하고 결과를 문자열로 반환해라. 만약 최종 문자열이 비었다면 Empty String을 반환해라.
s = 'aab'
'aab'는 인접한 문자 'a'를 삭제해서 'b'로 줄어든다.
s = 'abba'
두 개의 'b'를 삭제해서 'aa'가 남는다. 두 개의 'a'를 삭제하면 빈 문자열이 된다. 'Empty String'을 반환한다.
superReducedString 함수를 완성해라.
superReducedString 함수는 아래와 같은 매개변수를 가지고 있다.
문자를 순서대로 순회하면서 인접한 문자가 같은 문자인지 확인하면 된다. 그리고 따로 순회하면서 문자를 담아두어 제거하면서 진행한다.
결과를 담아둘 문자열을 생성한다.
StringBuilder result = new StringBuilder();
반복문을 사용해 문자를 비교하며 result에 담거나 삭제한다.
for(int i = 0; i < s.length(); i++){
char now = s.charAt(i);
if (result.length() > 0 && result.charAt(result.length() - 1) == now) {
result.deleteCharAt(result.length() - 1);
} else {
result.append(now);
}
}
마지막으로 result의 길이가 0이면 빈 문자열이기 때문에 Empty String을 반환하고 그렇지 않으면 result를 반환한다.
if(result.length() == 0){
return "Empty String";
}else{
return result.toString();
}
public static String superReducedString(String s) {
StringBuilder result = new StringBuilder();
for(int i = 0; i < s.length(); i++){
char now = s.charAt(i);
if (result.length() > 0 && result.charAt(result.length() - 1) == now) {
result.deleteCharAt(result.length() - 1);
} else {
result.append(now);
}
}
if(result.length() == 0){
return "Empty String";
}else{
return result.toString();
}
}