leetcode 14 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。
一、方法一,两两单词比较(横向比较)
方法一:可以两两单词进行比较,找出两两单词的公共前缀,再拿得出的公共前缀和第三个单词进行比较,在得出公共前缀。
//两两单词进行比较
public String longestCommonPrefix(String[] strs) {
//设置第一个单词为默认公共前缀
String commonPrefix=strs[0];
//从第二个单词开始比较
for(int i=1;i<strs.length;i++){
//获取当前单词
String next=strs[i];
int j=0;
for(;j<commonPrefix.length()&& j<next.length();j++){
if(commonPrefix.charAt(j)!=next.charAt(j)){
break;
}
}
commonPrefix=commonPrefix.substring(0,j);
}
return commonPrefix;
}
二、方法二,每个字符进行比较(纵向比较)
方法二:可以拿出第一个单词中的第一个字符和其余字符串中的第一个字符进行比较,如果相同,拿出第下一个字符和其余字符串的第二个字符进行比较,以此类推。如果不同,则返回之前扫描过的字符组成的字符串。
public String longestCommonPrefix(String[] strs){
//遍历第一个单词中的每个字符
for(int i=0;i<strs[0].length();i++){
//得到当前字符
char cur=strs[0].charAt(i);
//从第二个单词开始遍历
for(int j=1;j<strs.length;j++){
//获取当前单词
String next=strs[j];
if(i<next.length() && next.charAt(i)==cur){
//如果字符相同,则继续循环
continue;
}else{
//当前字符不同,则直接返回strs[0]的[0,i)中的字符,
//因为[0,i-1]的字符之前已经扫描过,确保是公共前缀。
return strs[0].substring(0,i);
}
}
}
//说明第一个单词为公共前缀,或者字符串数组里的字符串都是相同的。
return strs[0];
}