法一:纵向扫描比较
import java.util.*;
public class Solution {
/**
*
* @param strs string字符串一维数组
* @return string字符串
*/
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) { // 特殊情况:数组为空
return "";
}
StringBuffer lcp = new StringBuffer();
// 遍历字符串数组,找到最短的字符串,记录其长度
int len = Integer.MAX_VALUE;
for (int i = 0; i < strs.length; i++) {
if (len > strs[i].length()) {
len = strs[i].length();
}
}
// 比较每一行的字符串的第j的字符是否相同
for (int j = 0; j < len; j++) {
boolean flag = true; // 记录每一行某一列的元素是否相同
char c = strs[0].charAt(j); // 设定第一行的
for (int i = 0; i < strs.length; i++) { // 遍历字符串数组
if (strs[i].charAt(j) != c) {
flag = false;
break;
}
}
if (flag) {
lcp.append(c);
} else {
break;
}
}
return lcp.toString();
}
}
法二:利用startsWith(String prefix)
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0) { // 特殊情况:数组为空
return "";
}
String lcp = strs[0]; // 假定第一个字符串为最长公共前缀
for(int i = 1 ; i < strs.length ; i++) { // 遍历字符串数组
while(!strs[i].startsWith(lcp)) {
if(lcp.length() == 0) { // 特殊情况:最长公共前缀长度为0
return "";
}
lcp = lcp.substring(0,lcp.length()-1); // 不匹配就把公共前缀缩短
}
}
return lcp;
}
}