[LeetCode] Longest Nice Substring

아르당·2026년 6월 27일

LeetCode

목록 보기
377/561
post-thumbnail

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

Problem

문자열 s는 모든 알파벳이 대문자와 소문자로 나타나면 좋은 문자열이라고 한다. 예를 들어, "abABB"는 'A'와 'a'가 나타나고 'B'와 'b'가 나타나서 좋은 문자열이다. 하지만 "abA"는 'b'가 나타나지만, 'B'는 나타나지 않아서 좋은 문자열이 아니다.

주어진 문자열 s에서 좋은 문자열인 가장 긴 부분 문자열을 반환해라. 좋은 부분 문자열이 여러 개인 경우 가장 먼저 나타나는 부분 문자열을 반환해라. 좋은 부분 문자열이 없는 경우 빈 문자열을 반환해라.

Example

#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: 좋은 부분 문자열이 없다.

Constraints

  • 1 <= s.length <= 100
  • s는 영어 소문자와 대문자로 구성된다.

Solved

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;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글