소문자 문자열 s가 있다고 가정합니다. 여기에는 "?" 상징. 각각 "?" 제거하거나 소문자로 바꿔야 합니다. 문자 "a"로 시작하는 연속적으로 증가하는 가장 긴 부분 문자열의 길이를 찾아야 합니다.
따라서 입력이 s ="vta???defke"와 같으면 s를 "vtabcdefke"로 바꿀 수 있고 "abcdef"가 연속적으로 증가하는 가장 긴 부분 문자열이기 때문에 출력은 6이 됩니다. "아".
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 최대값 :=0
- 길이:=0
- qmarks :=0
- s의 각 c에 대해
- c가 "?"와 같으면
- qmarks :=qmarks + 1
- 그렇지 않으면
- idx :=(c의 ASCII) - ("a"의 ASCII)
- length :=idx + 1 if length <=idx <=length + qmarks 또는 idx <=qmarks 그렇지 않으면 0
- qmarks :=0
- maxlen :=maxlen의 최대값 및 (최소 길이 + qmarks 및 26)
- c가 "?"와 같으면
- 맥스렌 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s): maxlen = length = qmarks = 0 for c in s: if c == "?": qmarks += 1 else: idx = ord(c) - ord("a") length = idx + 1 if length <= idx <= length + qmarks or idx <= qmarks else 0 qmarks = 0 maxlen = max(maxlen, min(length + qmarks, 26)) return maxlen s = "vta???defke" print(solve(s))
입력
"vta???defke"
출력
6