目錄
- 找到字符串的最長無重復字符子串
- 字符串中的第一個唯一字符
- 字符串的字典序最長子序列
- 最小包含子串的長度
- 字符串的全排列(python)
一、找到字符串的最長無重復字符子串
給定一個字符串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)
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)

