반복되는 문자의 긴 문자열은 python3-무료 - 창 알고리즘을 슬라이딩

제목 : 문자열을 감안할 때, 당신은 반복되는 문자의 긴 문자열의 하위 길이를 포함하지 않는 알아보십시오.

예 1 :

입력 : "abcabcbb"
출력 : 3
설명 : 길이가 3 있도록 반복없이 문자의 긴 문자열이 "ABC"이기 때문입니다.
예 2 :

예 2 :

입력 : "BBBBB"
출력 : 1
설명 : 길이가 1 그래서, "b"를하지 않고 문자를 반복 가장 긴 문자열이 있기 때문에.
예 3 :

예 3 :

입력 : "pwwkew"
출력 : 3
설명 : 길이가 3, 그래서 "wke"없이 문자를 반복 가장 긴 하위 문자열이 있기 때문에.
"pwke은"서브 순서가 아니라 문자열입니다 당신의 대답은 길이의 문자열이어야 참고하시기 바랍니다.

소스 제목

아이디어 : 슬라이딩 윈도우를 사용하고 문자 K를 찾기 위해 반복되는 첫 번째 문자에서 후방으로보기 시작, 오른쪽으로 이동 때까지 문자를 모두 폐기 (K 포함), 다음 MAXLEN 크기를 업데이트 이전의 문자열 K.

세부 관심 파이썬 코드 구현 :( 길이)

def lengthOfLongestSubstring(s: str) -> int:
    i=1 #当前字符的位置
    begin=0
    maxlen=0
    dropedlen=0#记录舍去的字符串的长度
    if len(s)==0:
        return 0
    if len(s)==1:
        return 1
    for i in range(len(s)):
        if s[i] in s[begin:i]:
            # 先更新maxlen
            templ=len(s[begin:i])
            print("s[i]="+s[i])
            print("字串="+s[begin:i])
            print("templ = "+str(templ))
            maxlen=templ if(templ>maxlen) else maxlen
            # 舍去字串s[begin:i]中s[i]字符及前面的字符
            # 直接用s[begin:i].index(s[i])获得的是相对位置,不是在s中的位置,应该加上dropedlen
            relativelen=s[begin:i].index(s[i])#重复的字符串的相对位置
            begin=relativelen+dropedlen+1
            dropedlen=begin#更新删除的长度
    # 到字符串末再更新一次maxlen
    templ=len(s[begin:i])+1
    maxlen=templ if(templ>maxlen) else maxlen
    return maxlen


s = "au"
print("答案:"+str(lengthOfLongestSubstring(s)))

추천

출처www.cnblogs.com/zhoujiayingvana/p/12303808.html