두 개의 문자열 s와 t가 있다고 가정합니다. t는 대문자입니다. 다음 연산을 수행하여 t로 변환할 수 있는지 확인해야 합니다.
- 일부 소문자를 대문자로 변환합니다.
- 소문자를 모두 제거합니다.
따라서 입력이 s ="fanToM", t ="TOM"과 같으면 'o'를 'O'로 변경한 다음 s에서 다른 모든 소문자를 제거하여 t로 만들 수 있으므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- n :=s의 크기, m :=t의 크기
- dp:=(m + 1)x(n + 1) 크기의 행렬이고 False로 채움
- dp[0, 0] :=참
- 0 ~ s - 1 크기 범위의 i에 대해
- 0에서 t까지의 범위에 있는 j에 대해
- dp[i, j]가 True이면
- j
- dp[i + 1, j + 1] :=참
- j
- s[i]가 대문자가 아니면
- dp[i + 1, j] :=참
- dp[i, j]가 True이면
- 0에서 t까지의 범위에 있는 j에 대해
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s,t): n = len(s) m = len(t) dp= [[False for i in range(m+1)] for i in range(n+1)] dp[0][0] = True for i in range(len(s)): for j in range(len(t)+1): if dp[i][j] == True: if j < len(t) and (s[i].upper() == t[j]): dp[i + 1][j + 1] = True if s[i].isupper()==False: dp[i + 1][j] = True return dp[n][m] s = "fanToM" t = "TOM" print(solve(s, t))
입력
"fanToM", "TOM"
출력
True