Python 3.x 从python中的字符串获取所有子字符串?
在不使用任何模块和不进行重复的情况下,查找字符串中所有子字符串的最快方法是什么Python 3.x 从python中的字符串获取所有子字符串?,python-3.x,Python 3.x,在不使用任何模块和不进行重复的情况下,查找字符串中所有子字符串的最快方法是什么 def lols(s): if not s: return 0 lst = [] for i in range (len(s)): for j in range(i , len(s)+1): if not s[i:j] : pass elif len(s[i:j]) == le
def lols(s):
if not s:
return 0
lst = []
for i in range (len(s)):
for j in range(i , len(s)+1):
if not s[i:j] :
pass
elif len(s[i:j]) == len(set(s[i:j])):
lst.append(s[i:j])
res = (max(lst , key=len))
s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
s = s*100
lols(s)
def LOL(s):
如果不是,则:
返回0
lst=[]
对于范围内的i(len(s)):
对于范围(i,len(s)+1)内的j:
如果不是s[i:j]:
通过
elif len(s[i:j])==len(set(s[i:j]):
附加(s[i:j])
res=(最大值(lst,键=len))
s=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz012456789!\”#$%&'()*+,-./:@[\\]^_`{|}~"
s=s*100
lols(s)
此函数适用于小于1000的字符串,但在使用示例字符串且超过大字符串的时间限制时会冻结
我建议您不要使用超长字符串(如
s
)来尝试此操作。
如果您能够安装nltk
,使其正常工作(我最近遇到了一个问题,但通过将其安装到Windows沙盒中解决了这个问题,请参见此处:),那么这是一种方法
from nltk import ngrams
def lols(s):
lst = []
for i in range(1, len(s)):
lst.extend([''.join(j) for j in ngrams(s, i)])
lst.append(s)
return lst
如果没有,您可以这样做,而不是“从nltk导入ngrams”
演示:
可能您的函数性能会减慢,例如n2或n!(O(n2)或O(n!)),或者内存很紧。 关于您可以使用打印函数在标准输出中打印的字符串的最大大小,因为您必须将文本作为python对象传递给打印函数,并且由于变量的最大大小取决于您的平台,所以在32位平台上它可以是2**31-1,在64位平台上它可以是2**63-1
有关更多信息,请访问这是leetcode上的一个问题,您不允许使用库来解决它。哎哟,我在发布我的第一个答案后才注意到。据我所知,“收藏”和“itertools”“是标准库的一部分,因此不应该有不包含它们的python环境,但是在任何情况下,如果您可以用纯python实现“ngrams”(即特定长度的子字符串),这里介绍了一种纯python的生成ngrams的方法:尽管您必须删除一些不必要的行,并在return语句之前的行中将“token”替换为“s”(并将函数重命名为“ngrams”或在我编写的函数中调用“generatengrams”)。
import collections, itertools
def ngrams(words, n):
"""Edited from https://stackoverflow.com/questions/17531684/n-grams-in-python-four-five-six-grams"""
d = collections.deque(maxlen=n)
d.extend(words[:n])
words = words[n:]
answer = []
for window, word in zip(itertools.cycle((d,)), words):
answer.append(''.join(window))
d.append(word)
answer.append(''.join(window))
return answer
>>> lols('username')
['u', 's', 'e', 'r', 'n', 'a', 'm', 'e', 'us', 'se', 'er', 'rn', 'na', 'am', 'me', 'use', 'ser', 'ern', 'rna', 'nam', 'ame', 'user', 'sern', 'erna', 'rnam', 'name', 'usern', 'serna', 'ernam', 'rname', 'userna', 'sernam', 'ername', 'usernam', 'sername', 'username']