Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 연속적으로 증가하는 가장 긴 부분 문자열의 길이를 찾는 프로그램

<시간/>

소문자 문자열 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)
  • 맥스렌 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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