라이브러리 함수를 사용하여 파이썬 방식으로 파이썬의 두 문자열 사이에서 가장 긴 공통 접미사 접두사를 찾는 방법은 무엇입니까?

루벨 아메드

의 내가 두 문자열을 있다고 가정 해 봅시다, s1 = "1234"그리고 s2 ="34567"접미사 접두사 사이에 너무 긴 공통 s1하고 s2있다 "34". 이 일치하는 부분 ( "34")을 빠르게 얻을 수있는 비단뱀적인 방법이 있는지 알고 싶습니다 .

아래처럼 순진한 방법으로 할 수 있지만이 작업을 수행하는 데 흥미로운 라이브러리 함수 나 알고리즘이 있는지 알고 싶습니다.

s1 = "1234"
s2 = "34567"
length1 = len(s1) 
length2 = len(s2)

length = (length1 if length1<= length2 else length2)

for i in reversed(range(0, length)):
    if s1[-i - 1:] == s2[:i + 1]:
        print(s1[-i - 1:])
        break
    elif i > 0:
        continue
    else:
        print("no common suffix prefix")

산출:

34

컴팩트하고 스마트 한 것을 원합니다!

미친 물리학 자

알고리즘의 논리는 가능한 한 간단하지만 표기법을 확실히 압축 할 수 있습니다. 예를 들어 size n접미사에 대해 size 접두사를 확인하는 n것은 간단합니다.

s1[-n:] == s2[:n]

문자열 길이를 확인하는 데 사용하는 삼항 연산자는 다음과 같습니다.

min(len(s1), len(s2))

범위는 그 자체로 뒤로 갈 수 있습니다. 의 반대 range(x)

range(x - 1, -1, -1)

감소하는 값마다이를 확인 n하고 0이 아닌 첫 번째 결과를 반환 하는 반복기를 만들 수 있습니다 . 운 좋게도 next반복기가 비어있는 경우 기본값을 나타내는 두 번째 인수를 허용합니다.

common = next((s2[:n] for n in range(min(len(s1), len(s2)) - 1, -1, -1) if s1[-n:] == s2[:n]), '')

그것은 의무적 인 한 줄입니다. 더 읽기 쉬운 솔루션은 다음과 같습니다.

def common_fix(s1, s2):
    steps = range(min(len(s1), len(s2)) - 1, -1, -1)
    return next((s2[:n] for n in steps if s1[-n:] == s2[:n]), '')

일반적으로 기능을 유지하고 인쇄를 분리하십시오. 값을 얻은 다음 처리합니다 (인쇄 또는 다른 방법).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관