문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
문자열이 주어지고, 문자들을 문자열이 두 개씩 번갈아 나오는 문자로 만들어질때까지 제거해라. 특정 문자를 제거할 때, 해당 문자를 모두 지워야한다. 두 개의 문자가 번갈아 나오는 가장 긴 문자열을 찾아라.
s = 'abaacdadb'
a를 삭제하면, bcdbd가 남는다. 지금, 문자 c를 제거하면 문자열 길이가 4인 bdbd가 남는다. b 또는 d 중 하나를 제거하면 유효한 문자열이 생성되지 않는다. 4를 반환해라.
문자열 s가 주어지고, 문자가 번갈아 나오는 가장 긴 문자열 t로 변환해라. 문자열 t의 길이를 반환해라. 만약 문자열 t가 변환되지 않으면 0을 반환해라.
alternate 함수를 완성해라.
alternate 함수는 아래와 같은 매개변수를 가지고 있다.
public static int alternate(String s) {
return maxLength(s);
}
public static int maxLength(String s){
Set<Character> uniqueCharacters = new HashSet<>();
for(char c : s.toCharArray()){
uniqueCharacters.add(c);
}
char[] uniqueArray = new char[uniqueCharacters.size()];
int index = 0;
for(char c : uniqueCharacters){
uniqueArray[index++] = c;
}
int stringLength = 0;
for(int i = 0; i < uniqueArray.length - 1; i++){
for(int j = i + 1; j < uniqueArray.length; j++){
char leftChar = uniqueArray[i];
char rightChar = uniqueArray[j];
StringBuilder sb = new StringBuilder();
for(char c : s.toCharArray()){
if(c == leftChar || c == rightChar){
sb.append(c);
}
}
if(isValidString(sb.toString())){
stringLength = Math.max(stringLength, sb.length());
}
}
}
return stringLength;
}
public static boolean isValidString(String s){
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == s.charAt(i - 1)) {
return false;
}
}
return true;
}