class Solution:
    def makeGood(self, s: str) -> str:
        """
        main idea: stack, keep tracking current char and stack top if they are lower and upper case
        tc O(N) sc O(N)
        """
        st = []
        n = len(s)
        for i in range(n):
            if st and abs(ord(s[i])-ord(st[-1])) == 32:
                st.pop()
                continue
            st.append(s[i])
        return ''.join(st)