给定一个字符串,找出最长的子字符串,其字符是连续的(即它们是连续的字母),但可能是混乱的(即无序的)。例如:< br >输入:< code>"owadcbjkl"
输出:< code>"adcb"
我们认为< code>adcb与其形成的< code>abcd是连续的。
(这是一个面试问题。)
我有一个想法,运行一个有两个条件的同时循环,一个条件是使用Python的ort
检查连续字符,另一个条件是找到最小值和最大值,并检查以下所有字符是否都在这个范围内。
有没有什么方法可以用低运行时间复杂度来解决这个问题?我能做到的最好的是O(N^2),其中n是输入字符串的长度,而< code>ord()似乎是一个很慢的操作。
如果子字符串在字母表中定义为 ''.join(sorted(substr)),
则:
> < li>
子字符串中没有重复项,因此最长子字符串的长度小于(或等于)字母表的长度
(ord(max(substr))-ord(min(substra))1)==len(subtr)
,其中ord()
返回字母表中的位置(/-常量)
下面是 O(n*m*m)
-time, O
(m)-space 解决方案,其中 n
是 len(input_string),m
是 len(alphabet)
:
from itertools import count
def longest_substr(input_string):
maxsubstr = input_string[0:0] # empty slice (to accept subclasses of str)
for start in range(len(input_string)): # O(n)
for end in count(start + len(maxsubstr) + 1): # O(m)
substr = input_string[start:end] # O(m)
if len(set(substr)) != (end - start): # found duplicates or EOS
break
if (ord(max(substr)) - ord(min(substr)) + 1) == len(substr):
maxsubstr = substr
return maxsubstr
例:
print(longest_substr("owadcbjkl"))
# -> adcb
问题内容: 用Java编写一个函数,该函数接受一个字符串数组,并且从字符串数组中仅返回那些具有重复的特定字母的字符串,例如:如果I / P为 那么O / P应该是 我可以使用解决 IS 没有使用正则表达式的方式 ,使之短? 问题答案: 您可以使用反向引用: 通过Debuggex进行可视化 Java示例: 印刷品:
我如何在O(N**2)个时间内完成它?
问题内容: 我正在尝试从Java字符串中找到所有三个字母子字符串。 例如,从字符串“ example string”中,我应该得到“ exa”,“ xam”,“ amp”,“ mpl”,“ ple”,“ str”,“ tri”,“ rin”,“ ing”。 我尝试使用Java正则表达式“([[a-zA-Z]){3}”,但仅得到“ exa”,“ mpl”,“ str”,“ ing”。 有人可以告诉我
问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?
http://articles.leetcode.com/2011/11/lengton-palindromic-substring-part-i.html 我处理这个问题的领域是用java编写代码,使用简单的强力解决方案,然后使用o(n2)方法,没有额外的空间,就像现在这样。http://www.geeksforgeeks.org/lengte-palindromic-substring-set
我知道如何使用动态规划来解决 <罢工> 大多数 给定两个字符串的最长公共子串或最长公共子串。然而,对于字符串Y的子串X的最长子序列问题,我很难找到一个解决方案。 查找字符串X的所有子序列并按长度desc排序; 遍历排序的子序列,如果当前子序列是Y的子字符串,则返回子序列。 它可以工作,但运行时间可能会很糟糕。假设X中的所有字符都是唯一的,那么有2^m个子群,其中m是X的长度,我认为检查一个字符串是