522 Longest Uncommon Subsequence II
Problem:
Input: "aba", "cdc", "eae"
Output: 3Solutions:
public class Solution {
public int findLUSlength(String[] strs) {
int max = 0;
Arrays.sort(strs, new Comparator<String>() {
public int compare(String s1, String s2) {
if (s2.length() != s1.length()) {
return s2.length() - s1.length();
}
return s1.compareTo(s2);
}
});
Set<String> pres = new HashSet<String>();
for (int i = 0; i < strs.length; i ++) {
if (i == strs.length - 1 || !strs[i].equals(strs[i + 1])) {
boolean valid = true;
for (String pre:pres) {
if (isSub(strs[i], pre)) {
valid = false;
break;
}
}
if (valid == true) {
return strs[i].length();
}
else {
pres.add(strs[i]);
}
}
else {
String s = strs[i];
pres.add(s);
while (i < strs.length && strs[i].equals(s)) {
i ++;
}
i --;
}
}
return -1;
}
private boolean isSub(String s, String l) {
if (s.length() > l.length()) {
return false;
}
if (s.length() == 1) {
return l.indexOf(s) != -1;
}
char c = s.charAt(0);
int cut = l.indexOf(c);
if (cut == -1) {
return false;
}
return isSub(s.substring(1), l.substring(cut + 1));
}
}Last updated