我写复杂了,我的思路是截取每个字符串的前n位创建一个新的字符串数组,将数组内每个字符串进行对比,若全部相同则n++
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 1) {
return strs[0];
}
int j = 1;
int min = Integer.MAX_VALUE;
for (int i = 0; i < strs.length; i++) {
min = Math.min(min, strs[i].length());
}
List<String> list = new ArrayList<>();
for (int i = j; i <= min; i++) {
String s = compareString(strs, i);
if (s != null) {
list.add(s);
}
}
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
});
if(list.isEmpty()){
return "";
}
return list.get(0);
}
public String compareString(String[] strs, int n) {
String[] tempStrs = new String[strs.length];
for (int i = 0; i < strs.length; i++) {
tempStrs[i] = strs[i].substring(0, n);
}
Arrays.sort(tempStrs);
String str = tempStrs[0];
for (String temp : tempStrs) {
if (!str.equals(temp)) {
return "";
}
}
return str;
}
}
答案
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
int length = strs[0].length();
int count = strs.length;
for (int i = 0; i < length; i++) {
char c = strs[0].charAt(i);
for (int j = 1; j < count; j++) {
if (i == strs[j].length() || strs[j].charAt(i) != c) {
return strs[0].substring(0, i);
}
}
}
return strs[0];
}
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/longest-common-prefix/solution/zui-chang-gong-gong-qian-zhui-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。