문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
문자열 s는 모든 알파벳이 대문자와 소문자로 나타나면 좋은 문자열이라고 한다. 예를 들어, "abABB"는 'A'와 'a'가 나타나고 'B'와 'b'가 나타나서 좋은 문자열이다. 하지만 "abA"는 'b'가 나타나지만, 'B'는 나타나지 않아서 좋은 문자열이 아니다.
주어진 문자열 s에서 좋은 문자열인 가장 긴 부분 문자열을 반환해라. 좋은 부분 문자열이 여러 개인 경우 가장 먼저 나타나는 부분 문자열을 반환해라. 좋은 부분 문자열이 없는 경우 빈 문자열을 반환해라.
#1
Input: s = "YazaAay"
Output: "aAa"
Explanation: "aAa"는 좋은 문자열이다. 왜냐하면 'A/a'는 s에 알파벳 문자이고 'A'와 'a' 둘 다 나타난다.
#2
Input: s = "Bb"
Output: "Bb"
Explanation: "Bb"는 좋은 문자열이다. 'B'와 'b' 둘 다 나타난다. 문자열 전체가 부분 문자열이다.
#3
Input: s = "c"
Output: ""
Explanation: 좋은 부분 문자열이 없다.
class Solution {
public String longestNiceSubstring(String s) {
String result = "";
for(int i = 0; i < s.length(); i++){
for(int j = i; j < s.length(); j++){
String sub = s.substring(i, j + 1);
if(isNice(sub) == true){
if(sub.length() > result.length()){
result = sub;
}
}
}
}
return result;
}
public boolean isNice(String s){
HashSet<Character> set = new HashSet<>();
for(char c : s.toCharArray()){
set.add(c);
}
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(!(set.contains(Character.toUpperCase(c)) && set.contains(Character.toLowerCase(c)))){
return false;
}
}
return true;
}
}