빙응의 공부 블로그

[Arogorithm]문자열 본문

Argorithm 이론

[Arogorithm]문자열

빙응이 2024. 7. 11. 16:28
대표적인 문자열 유형인 회문과 가로열에 대해 알아보자...

📝 회문

  • 앞 뒤 방향으로 볼 때, 같은 순서의 문자로 구성된 문자열을 의미한다.
  • 쉽게 좌우 대칭이라 보면 된다. 
    public static boolean isPalindrome(String str) {
        int left = 0;
        int right = str.length() - 1;

        while (left < right) {
            if (str.charAt(left) != str.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

 

📝 올바른 괄호 문자열

  • 올바른 괄호 문자열이란 모든 괄호가 적절히 짝을 이루고 잇는 문자열을 의미한다.
  • 예를 들어 (), {}, [] 모두 올바른 괄호 문자열이다. 
  • 보통 스택을 통해 검증한다. 
    public static boolean isValidParentheses(String str) {
        Stack<Character> stack = new Stack<>();

        for (char ch : str.toCharArray()) {
            if (ch == '(' || ch == '{' || ch == '[') {
                stack.push(ch);
            } else if (ch == ')' || ch == '}' || ch == ']') {
                if (stack.isEmpty()) {
                    return false;
                }
                char openBracket = stack.pop();
                if (!isMatchingPair(openBracket, ch)) {
                    return false;
                }
            }
        }

        return stack.isEmpty();
    }

    private static boolean isMatchingPair(char openBracket, char closeBracket) {
        return (openBracket == '(' && closeBracket == ')') ||
               (openBracket == '{' && closeBracket == '}') ||
               (openBracket == '[' && closeBracket == ']');
    } 해당 방식으로 풀 수 있다
그런데 너무 복잡하지 않아??

📌 치환

  • 모든 괄호에 대해 '('를 1로, ')'을 -1로 치환하면 쉽게 풀 수 있다.
  • 문자열 s를 모두 순회하여 합 계산을 하는 것