通过万岁!!!
- 题目:给你一个字符串数组,然后让你看一下数组中,那么字符串是满足条件的,最长的。条件就是这个字符串,不能是其他字符串的子串。
- 思路:我这里就是暴力破解了,首先双层循环遍历数组,然后i和j进行比较。看一下i是不是j的子串,如果是,则i直接下一个即可, 如果都不满足,则看看这个字符串的长度,与ans取最大的即可。
- 技巧:暴力和剪枝
java代码
class Solution {
public int findLUSlength(String[] strs) {
int ans = -1;
out:
for (int i = 0; i < strs.length; i++) {
for (int j = 0; j < strs.length; j++) {
if (i == j) {
continue;
}
if (isSonString(strs[i], strs[j])) {
continue out;// 对外层循环继续continue,因为i已经是j的子串了
}
}
ans = Math.max(ans, strs[i].length());
}
return ans;
}
public boolean isSonString(String str1, String str2) {
int len1 = str1.length();
int len2 = str2.length();
int i1 = 0, i2 = 0;
while (i1 < len1 && i2 < len2) {
if (str1.charAt(i1) == str2.charAt(i2)) {
i1++;
i2++;
} else {
i2++;
}
}
if (i1 == len1) {// 是子串
return true;
} else {
return false;
}
}
}
- 总结:题目不是特别难,但是主要是用暴力的方法有点不甘心,总体来说,时间复杂度还行,就这样吧。