字符串的子串


目錄

 

、找到字符串的最長無重復字符子串

給定一個字符串str,返回str的最長無重復字符子串的長度。

舉例:

str = 'abcd',返回4.

str = 'aabcb',最長無重復字符子串為'abc',返回3.

要求:

如果str的長度為N,請實現時間復雜度為O(N)的方法。

思路:時間O(N),空間O(N)

遍歷字符串中的每一個元素。借助一個輔助鍵值對來存儲某個元素最后一次出現的下標。用一個整形變量存儲當前無重復字符的子串開始的下標。

代碼:

def maxUnique(s):
    if s == None or s == '':
        return 0
    dic = {}
    res , start = 0 , -1
    for i in range(len(s)):
        if s[i] in dic:
            start = max(start,dic[s[i]])
        tmp = i - start
        dic[s[i]] = i
        res = max(res,tmp)
    return res
   
s = 'ababcadc'
maxUnique(s)

、題目:給定一個字符串,輸出所有的字典序。

如:

輸入字符串:'ac',輸出:['ac','ca']

輸入字符串:‘abc' ,輸出:['abc','acb','bac','bca','cab','cba']

輸入字符串:‘acc',輸出:['acc','cac','cca']

思路:遞歸

如:'abc',對於'a',返回’bc'的全排列字典序,對於'b',返回'ac'的全排列,對於'c',返回'ab‘的全排列。【循環加遞歸】

代碼1:

復制代碼
def printstr(s):
    liststr=[]
    result=[]
    if len(s)==1:
        liststr.append(s)
        return liststr
    else:
        for i in range(len(s)):
            liststr1=printstr(s[:i]+s[i+1:])
            for item in liststr1:
                result.append(s[i]+str(item))
        return list(set(result))
s=input()
print(printstr(s))
復制代碼

代碼2:

復制代碼
res = list()
def traverse(ss,join_ss=''):
    if ss:
        for i,s in enumerate(ss):
            sub_ss = ss[:i]+ss[i+1:]
            traverse(sub_ss,join_ss+s)
    elif join_ss and join_ss not in res:
        res.append(join_ss)
    return res

result = traverse('abc','')
print(result)
復制代碼

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM