Longest Uncommon Subsequence I
Given two strings a and b, return the length of the longest uncommon subsequence between a and b. If the longest uncommon subsequence does not exist, return -1.
An uncommon subsequence between two strings is a string that is a subsequence of one but not the other.
A subsequence of a string s is a string that can be obtained after deleting any number of characters from s.
For example, "abc" is a subsequence of "aebdc" because you can delete the underlined characters in "aebdc" to get "abc". Other subsequences of "aebdc" include "aebdc", "aeb", and "" (empty string).
Example 1:
Input: a = "aba", b = "cdc"
Output: 3
Explanation: One longest uncommon subsequence is "aba" because "aba" is a subsequence of "aba" but not "cdc".
Note that "cdc" is also a longest uncommon subsequence.
Example 2:
Input: a = "aaa", b = "bbb"
Output: 3
Explanation: The longest uncommon subsequences are "aaa" and "bbb".
Example 3:
Input: a = "aaa", b = "aaa"
Output: -1
Explanation: Every subsequence of string a is also a subsequence of string b. Similarly, every subsequence of string b is also a subsequence of string a.
Constraints:
1 <= a.length, b.length <= 100
a and b consist of lower-case English letters.
思路一:初看题以为比较难解,不过解题过程中把一个个情况排除后,发现是比较简单的题。完全分配,a 和 b 只可能出现两种情况,
- 等长
- 不等长
对于等长的情况,继续完全分类 - 出现的字符一致
- 出现的字符不一致
对上面的分类情况进行判断即可
public int findLUSlength(String a, String b) {
int aLength = a.length();
int bLength = b.length();
if (aLength != bLength) {
return Math.max(aLength, bLength);
}
Set<Character> set = new HashSet<>();
for (int i = 0; i < aLength; i++) {
set.add(a.charAt(i));
}
for (int i = 0; i < bLength; i++) {
if (!set.contains(b.charAt(i))) {
return aLength;
}
}
if (a.equals(b)) {
return -1;
} else {
return aLength;
}
}
思路二:看了题解,发现不用判断出现的字符是否一致,直接看字符串是否一致就行
标签:return,string,uncommon,subsequence,521,easy,leetcode,aLength,longest From: https://www.cnblogs.com/iyiluo/p/17035194.html