522. Longest Uncommon Subsequence II
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].
Approach #1: Simulate. [Java]
class Solution { public int findLUSlength(String[] strs) { Arrays.sort(strs, new Comparator<String>() { public int compare(String o1, String o2) { return o2.length() - o1.length(); } }); Set<String> duplicates = getDuplicates(strs); for (int i = 0; i < strs.length; ++i) { if (!duplicates.contains(strs[i])) { if (i == 0) return strs[0].length(); for (int j = 0; j < i; ++j) { if (isSubsequence(strs[j], strs[i])) break; if (j == i - 1) return strs[i].length(); } } } return -1; } boolean isSubsequence(String a, String b) { int i = 0, j = 0; while (i < a.length() && j < b.length()) { if (a.charAt(i) == b.charAt(j)) ++j; ++i; } return j == b.length(); } Set<String> getDuplicates(String[] strs) { Set<String> set = new HashSet<String>(); Set<String> duplicates = new HashSet<String>(); for (String str : strs) { if (set.contains(str)) duplicates.add(str); set.add(str); } return duplicates; } }
Analysis:
Sort the string in the reverse order. If there is not duplicates in the array, then the longest string is the answer.
But if there are duplicates, and if the longset string is not the answer, then we need to check other strings. But the smaller string can be subsequence of the bigger string. For this reason, we need to check if the string is a subsquence of all the strings bigger than itself. If not, that is the answer.
Reference:
https://leetcode.com/problems/longest-uncommon-subsequence-ii/discuss/99443/Java(15ms)-Sort-%2B-check-subsequence
相关文章
- Leetcode: Shortest Word Distance II
- hdu1027 Ignatius and the Princess II (全排列 & STL中的神器)
- [LeetCode] Reverse Linked List II
- 71、【哈希表】leetcode——350. 两个数组的交集 II(C++版本)
- pgpool-II的master-slave模式的分析
- PPAS上运行pg_dump经过II
- 【正点原子FPGA连载】第四章Quartus II软件的安装和使用 -摘自【正点原子】新起点之FPGA开发指南_V2.1
- [LeetCode]Subsets II生成组合序列
- UVA 10869 - Brownie Points II(树阵)
- [LeetCode] 454. 4Sum II 四数之和之二
- 113. Path Sum II