编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
class Solution {
public String longestCommonPrefix(String[] strs) {
String s="";
int judge=1;
if(strs.length==0){//数组为空直接返回""
return s;
}
for(int i=0;i<strs[0].length();i++){
char a=strs[0].charAt(i);//直接选择第一个数组元素,依次取这个字符串的字符
for(int j=0;j<strs.length;j++){
if(i>=strs[j].length()){//因为每个字符串长度不同,防止溢出
judge=0;
break;
}
if(a!=strs[j].charAt(i)){
judge=0;//只要存在不同,直接退出
break;
}
else{
if(j==strs.length-1){
s=s+a;
}
}
}
if(judge==0){
break;
}
}
return s;
}
}
找出一个字符串数组中最长公共前缀字符串
1.水平扫描
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i++)
while (strs[i].indexOf(prefix) != 0) { \\返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回-1。
prefix = prefix.substring(0, prefix.length() - 1); \\子字符串开始位置不为0则缩小子字符串,再进行对比
if (prefix.isEmpty()) return "";
}
return prefix;
}
2.垂直扫描
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0)
return "";
for (int i = 0; i < strs[0].length() ; i++){
char c = strs[0].charAt(i);
for (int j = 1; j < strs.length; j ++) {
if (i == strs[j].length() || strs[j].charAt(i) != c)
return strs[0].substring(0, i);
}
}
return strs[0];
}