最长公共前缀
最长公共前缀
题目链接
题目描述
写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:
strs = ["flower","flow","flight"]
输出:
"fl"
示例 2:
输入:
strs = ["dog","racecar","car"]
输出:
""
解释:
输入不存在公共前缀。
题目解法
第一种解法:横向扫描 一个一个字符串比较
public static String longestCommonPrefix(String[] strs) {
//先判断字符串数组是否为空
if(strs == null || strs.length == 0) {
return "";
}
//那第一个字符串和其他字符做比较
String pre = strs[0];
int length = strs.length;
for(int i = 1; i < length; i++) {
// 两个字符串比较的方法
pre = longestCommonPrefix(pre,strs[i]);
if(pre.length() == 0) {
break;
}
}
return pre;
}
public static String longestCommonPrefix(String pre,String fix) {
//取两个字符串最小的一个长度,因为两个字符串的公共长度最长只能为最小字符串的长度
int min = Math.min(pre.length(), fix.length());
int index = 0;
// index < min 防止溢出, pre.charAt(index) == fix.charAt(index) 比较两个字符串中同位置的字符是否相等
while (index < min && pre.charAt(index) == fix.charAt(index)) {
//相等就++
index++;
}
//循环退出后,表示获取到了公共长度的最长位置,就截取字符串
return pre.substring(0,index);
}
第二种解法:纵向扫描
取字符串数组中的每一个字符串,相同位置的字符进行比较
public static String longestCommonPrefix1(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];
}