Longest Uncommon Subsequence I
EasyUpdated: Aug 2, 2025
Practice on:
Problem
Given two strings a and b, return _the length of thelongest uncommon subsequence between _a and b. If no such uncommon subsequence exists, return -1 .
An uncommon subsequence between two strings is a string that is a subsequence of exactly one of them.
Examples
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. So the answer would be -1.
Constraints
1 <= a.length, b.length <= 100aandbconsist of lower-case English letters.
Solution
Method 1 – Simple Comparison
Intuition
If the two strings are not equal, the longer string itself is an uncommon subsequence, since it cannot be a subsequence of the other. If they are equal, there is no uncommon subsequence.
Approach
- Compare the two strings
aandb. - If they are equal, return -1 (no uncommon subsequence).
- Otherwise, return the length of the longer string.
Code
C++
class Solution {
public:
int findLUSlength(string a, string b) {
return a == b ? -1 : max(a.size(), b.size());
}
};
Go
func findLUSlength(a string, b string) int {
if a == b {
return -1
}
if len(a) > len(b) {
return len(a)
}
return len(b)
}
Java
class Solution {
public int findLUSlength(String a, String b) {
return a.equals(b) ? -1 : Math.max(a.length(), b.length());
}
}
Kotlin
class Solution {
fun findLUSlength(a: String, b: String): Int {
return if (a == b) -1 else maxOf(a.length, b.length)
}
}
Python
class Solution:
def findLUSlength(self, a: str, b: str) -> int:
return -1 if a == b else max(len(a), len(b))
Rust
impl Solution {
pub fn find_lus_length(a: String, b: String) -> i32 {
if a == b { -1 } else { a.len().max(b.len()) as i32 }
}
}
TypeScript
class Solution {
findLUSlength(a: string, b: string): number {
return a === b ? -1 : Math.max(a.length, b.length);
}
}
Complexity
- ⏰ Time complexity:
O(n), where n is the length of the longer string, for string comparison. - 🧺 Space complexity:
O(1), as no extra space is used.