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

Python을 사용하여 가장 긴 좋은 부분 문자열을 찾는 프로그램

<시간/>

문자열 s가 있다고 가정합니다. 우리는 s의 가장 긴 nice 부분 문자열을 찾아야 합니다. 문자열 s의 경우 s의 모든 알파벳 문자가 대문자와 소문자로 모두 표시되면 nice라고 합니다. 이러한 하위 문자열이 여러 개 있는 경우 가장 먼저 발생한 하위 문자열을 반환합니다.

따라서 입력이 s ="ZbybBbz"와 같으면 소문자 및 대문자 B가 포함되어 있으므로 출력은 "bBb"가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • cur_max:=-1

  • res:=빈 문자열

  • 범위 0에서 s까지의 i에 대해

    • c :=s[i]

    • 위 :=새로운 세트

    • 더 낮은 :=새로운 세트

    • c가 소문자이면

      • 아래에 c 추가

    • c가 대문자인 경우

      • c를 대문자로 추가하되 소문자로 변환하기 전에

    • 범위 i+1에서 s까지의 j에 대해 수행

      • c :=s[j]

      • c가 소문자이면

        • 아래에 c 추가

      • c가 대문자인 경우

        • c를 대문자로 추가하되 소문자로 변환하기 전에

      • 상한이 하한과 같으면

        • j-i> cur_max이면

          • cur_max :=j-i

          • res :=s의 부분 문자열[인덱스 i에서 j+1까지]

  • 반환 해상도

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

예시

def solve(s):
   cur_max= -1
   res=""
   for i in range(len(s)):
      c = s[i]
      upper = set()
      lower = set()
      if c.islower():
         lower.add(c)
      if c.isupper():
         upper.add(c.lower())
      for j in range(i+1,len(s)):
         c = s[j]
         if c.islower():
            lower.add(c)
         if c.isupper():
            upper.add(c.lower())
         if upper == lower:
            if j-i>cur_max:
               cur_max = j-i
               res = s[i:j+1]
   return res
s = "ZbybBbz"
print(solve(s))

입력

"ZbybBbz"

출력

bBb