
方案一:
思想比较前缀是否一致
public static String longestCommonPrefix(String[] strs) {
int length = strs.length;
if(length <= 1){
return strs[0];
}
// 初始化前缀字符串
String b = "";
// 取第一个字符串的长度,最长不会超过这个字符串
int a = strs[0].length();
// 循环第一个参数的次数
for (int i = 0; i < a; i++) {
// 在每次比较之前,拼接一个字符串,形成新的字符串
b = b+strs[0].charAt(i);
// 循环的数组的元素,每次取一个字符串判断
// 思想比较前缀是否一致
for (String s : strs) {
// 判断每个字符串是不是b的前缀
if (!s.startsWith(b)) {
// 遇到不是b的前缀开头,直接退出返回值。b.length() - 1 的因为在比较之前就拼接了一个字符串,所以要减一
return b.substring(0, b.length() - 1);
}
}
}
return b;
}
方案二:运行时间比方案一更快。
比较每个字符串的同一个下标对应的值是否相等
public static String longestCommonPrefix1(String[] strs) {
int length = strs.length;
if(length <= 1){
return strs[0];
}
// 使用StringBuilder 进行短字符串拼接更快
StringBuilder b = new StringBuilder();
int a = strs[0].length();
// 循环第一个参数的次数
// 循环第一个参数的长度
for (int i = 0; i < a; i++) {
// 获取i这个下标对应的值
char c = strs[0].charAt(i);
// 思想: 比较每个字符串的同位是否相等
for (String s : strs) {
// s.length() <= i 是防止遇到元素长度小于当前的下标时,将直接返回值
// s.charAt(i) != c 判断i下标对应的值是否为c
if(s.length() <= i || s.charAt(i) != c){
return b.toString();
}
}
// 每个字符串的通同位相等时,更新最长公共前缀
b.append(c);
}
return b.toString();
}
480

被折叠的 条评论
为什么被折叠?



