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

Python에서 가장 긴 연속 문자 및 숫자 하위 문자열 찾기

<시간/>

주어진 문자열은 숫자와 문자의 혼합일 수 있습니다. 이 기사에서는 문자와 숫자가 함께 포함된 가장 큰 부분 문자열을 찾아야 합니다.

재 모듈 사용

정규식 모듈을 사용하여 숫자 또는 문자를 포함하는 모든 연속 하위 문자열을 찾을 수 있습니다. 그런 다음 max 함수를 적용하여 발견된 모든 하위 문자열 중에서 최대 길이를 갖는 문자와 숫자의 연속 하위 문자열만 선택합니다. findall 함수는 필요한 부분 문자열을 식별하고 가져오는 데도 사용됩니다.

예시

import re

def longSubstring(str):
   letter = max(re.findall(r'\D+', str), key=len)
   digit = max(re.findall(r'\d+', str), key=len)

   return letter, digit

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

(' Congratulations! ', '459')

len() 및 While 루프 사용

이것은 주어진 문자열에서 부분 문자열로 존재하는 숫자와 문자의 길이를 확인하기 위해 while 루프를 설계하는 직선적이지만 느린 접근 방식입니다. 그런 다음 길이를 비교하고 최대 길이의 부분 문자열만 선택합니다.

예시

def longSubstring(s):
   max_letterSeq = ''
   max_digitSeq = ''
   i = 0
   while (i < len(s)):

      current_letterSeq = ''
      current_digitSeq = ''

      # Letters
      while (i < len(s) and s[i].isalpha()):
         current_letterSeq += s[i]
         i += 1

      # Digits
      while (i < len(s) and s[i].isdigit()):
         current_digitSeq += s[i]
         i += 1

      # Check if not digit or alphabet
      if (i < len(s) and not (s[i].isdigit())
            and not (s[i].isalpha())):
         i += 1

      if (len(current_letterSeq) > len(max_letterSeq)):
         max_letterSeq = current_letterSeq

      if (len(current_digitSeq) > len(max_digitSeq)):
         max_digitSeq = current_digitSeq

   return max_letterSeq, max_digitSeq

str = 'Hello 459 Congratulations! 234'
print(longSubstring(str))

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

('Congratulations', '459')