字符串的子串

目录

、找到字符串的最长无重复字符子串

给定一个字符串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)
复制代码

 

 

 
原文地址:https://www.cnblogs.com/Lee-yl/p/10466751.html