본문 바로가기
Algorithm/leetcode

[leetcode]1544.Make The String Great

by 세류오 2023. 8. 31.

https://leetcode.com/problems/make-the-string-great/

 

Make The String Great - LeetCode

Can you solve this real interview question? Make The String Great - Given a string s of lower and upper case English letters. A good string is a string which doesn't have two adjacent characters s[i] and s[i + 1] where: * 0 <= i <= s.length - 2 * s[i] is a

leetcode.com

문제 이해

대문자 소문자 영어단어를 가진 문자열 ‘s’가 주어진다

s[i]다음 s[i+1]자리에 동일한 단어지만 형태가 다른 글자가 들어온다면 지워준다

-> ”대문자+소문자, 소문자+대문자”

EX) “leEeetcode” → eE → “leetcode” ”abBAcC” → bB → “aAcC” → aA → “cC” → cC → “”

문제 풀이

아스키 코드 특징을 이용하여 비교

동일한 영어단어의 아스키코드 번호는 무조껀 32가 차이난다

절대값을 구해서 32가 나오면 true 아니라면 false값을 리턴하여 문제를 풀어나감

class Solution {
    public String makeGood(String s) {
        //같은 단어이지만
        //소문자+대문자 로 구성되면 삭제
        Stack<Character> st = new Stack<>();
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            
            if(st.size() > 0) {
                char top = st.peek();
                boolean flag = compareChar(top, c);

                if(flag == true){
                    st.pop();
                } else {
                    st.push(c);
                }
            } else {
                st.push(c);                     
            }
        }
        for(char c : st){
            sb.append(c);
        }

        return sb.toString();
    }
    //아스키코드를 이용한 영어단어 대소문자 비교
    public boolean compareChar(char a, char b) {
        int num1 = a;
        int num2 = b;
        int asc = num1 - num2;
        //대문자<->소문자 = 32차이
        if (Math.abs(asc) == 32) {
            return true;
        } else {
            return false;
        }
    }
}