😎풀이

  1. s 순회
  2. 중복이 제거되어야 하므로 이미 있는 문자는 추가하지 않음
  3. 스택 제거 조건 명시
    3-1. 스택에 요소가 존재하는가
    3-2. 스택의 마지막 요소가 현재 문자열보다 사전순으로 큰가? (사전순 낮게 생성하고 싶으므로 검사)
    3-3. 해당 문자를 제거해도 뒤에 해당 문자가 등장해 재활용 가능한가?
  4. 현재 문자 추가
  5. stack 문자열화 후 반환
function removeDuplicateLetters(s: string): string {
    const stack = []
    for(let i = 0; i < s.length; i++) {
        const cur = s[i]
        if(stack.includes(cur)) continue
        while(
            stack.length && 
            stack.at(-1) > cur && 
            s.lastIndexOf(stack.at(-1)) > i
        ) stack.pop()
        stack.push(cur)
    }
    return stack.join("")
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글