forked from shuboc/LeetCode-2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
longest-uncommon-subsequence-ii.py
49 lines (46 loc) · 1.67 KB
/
longest-uncommon-subsequence-ii.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Time: O(l * n^2)
# Space: O(1)
# Given a list of strings, you need to find the longest uncommon subsequence among them.
# The longest uncommon subsequence is defined as the longest subsequence of one of these strings
# and this subsequence should not be any subsequence of the other strings.
#
# A subsequence is a sequence that can be derived from one sequence
# by deleting some characters without changing the order of the remaining elements.
# Trivially, any string is a subsequence of itself and an empty string is a subsequence of any string.
#
# The input will be a list of strings, and the output needs to be the length of the longest uncommon subsequence.
# If the longest uncommon subsequence doesn't exist, return -1.
#
# Example 1:
# Input: "aba", "cdc", "eae"
# Output: 3
# Note:
#
# All the given strings' lengths will not exceed 10.
# The length of the given list will be in the range of [2, 50].
class Solution(object):
def findLUSlength(self, strs):
"""
:type strs: List[str]
:rtype: int
"""
def isSubsequence(a, b):
i = 0
for j in xrange(len(b)):
if i >= len(a):
break
if a[i] == b[j]:
i += 1
return i == len(a)
strs.sort(key=len, reverse=True)
for i in xrange(len(strs)):
all_of = True
for j in xrange(len(strs)):
if len(strs[j]) < len(strs[i]):
break
if i != j and isSubsequence(strs[i], strs[j]):
all_of = False
break
if all_of:
return len(strs[i])
return -1