Longest Uncommon Subsequence II
此题难度不在于想到方法,而在于你觉得这种方法是可行的... 这题跟第一问有一个很大的不同在于有多个字符串,而多个字符串会有一个什么情况呢?比如有abc,aabbcc,aabbcc这样一组,这组实际上是没有LUS的,但是它们之间abc和aabbcc是有LUS的,问题在于这个LUS再和另一个aabbcc之间没有LUS,这么去想的话,很容易往类似归并排序那样的思路即两个两个之间找LUS再并起来找最后结果的思路上去靠,但是这样是行不通的,考虑aabbcc,aabbcc,cb,abc,如果顺序循环逐对找LUS最后的结果就是-1了,但实际上这组的LUS应该是2即cb这个字符串,到了这里,也许又会想到按照长度排序了,这个思维倒没有错,的确应该按照长度排序,但是排序之后该怎么找呢?如果按照单调栈的思维去逐个检查子序列,则又有一个反例即aaaaa,aaaaa,aaa,aaa,aaaaa这样最后结果是5,而实际是-1,最后只能用按长度反排序的方法然后对每个字符逐个去数组里面找它是不是其他字符的子字符串,如果它不是任何一个字符的子字符串,则我们可以立即返回这个长度
class Solution(object):
def findLUSlength(self, strs):
"""
:type strs: List[str]
:rtype: int
"""
n = len(strs)
stack = []
strs.sort(cmp=lambda x, y: cmp(len(y), len(x)))
for i in xrange(n):
if all(not self.subseq(strs[i], strs[j]) for j in xrange(n) if j != i):
return len(strs[i])
return -1
def subseq(self, stringA, stringB):
n, m = len(stringA), len(stringB)
cur = 0
for i in xrange(m):
if stringB[i] == stringA[cur]:
cur += 1
if cur == n:
return True
return cur == n