소문자와 대문자가 있는 문자열 s가 있다고 가정합니다. 우리는 문자열이 두 개의 인접한 문자 s[i]와 s[i + 1]을 가지지 않는 좋은 문자열이라고 생각할 것입니다. 여기서 -
-
0 <=i <=s의 크기 - 2
-
s[i]는 소문자이고 s[i + 1]은 동일한 문자이지만 대문자 또는 그 반대입니다.
문자열을 좋은 문자열로 변환하기 위해 문자열을 나쁘게 만드는 두 개의 인접한 문자를 선택하고 제거할 수 있습니다. 문자열이 좋아질 때까지 이 프로세스를 계속할 것입니다(빈 문자열도 좋은 문자열일 수 있음). 문자열을 잘 만든 후에 찾아야 합니다.
따라서 입력이 s ="popPpulaBbr"과 같으면 출력은 "popular"가 됩니다. 왜냐하면 처음에는 "p P 를 삭제하기 때문입니다. " 또는 "Pp " 및 "Bb"를 삭제합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
res :=새 목록
-
s의 각 문자 ch에 대해
-
res가 비어 있지 않고 res의 마지막 요소가 위 또는 아래의 경우에 ch와 같으면
-
res에서 마지막 요소 삭제
-
-
그렇지 않으면
-
res의 끝에 ch 삽입
-
-
-
res에 있는 각 요소를 결합하고 반환
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s): res = [] for ch in s: if res and res[-1] != ch and res[-1].lower() == ch.lower(): res.pop() else: res.append(ch) return ''.join(res) s = "popPpulaBbr" print(solve(s))
입력
"popPpulaBbr"
출력
popular