题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
我的答案:
代码如下:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs==null){
return null;
}
if(strs.length==0){
return "";
}
String result = "";
if(strs.length==1){
return strs[0];
}
result = strs[0];
for(int i=1;i<strs.length;i++){
//这里不能用result==""
if(result.equals("")){
return "";
}
result=prefix(result,strs[i]);
}
return result;
}
private String prefix(String s1,String s2){
int len = s1.length()<s2.length()?s1.length():s2.length();
int i=0;
while(i<len){
if(s1.charAt(i)==s2.charAt(i)){
i++;
}else{
break;
}
}
return s1.substring(0,i);
}
}
官方题解:
我的答案的思路感觉其实和官方题解的解法一是差不多的,不过我又整复杂了,我单独写了一个prefix函数来找result和后面一个字符串的共同前缀,官方题解的解法一直接用一个while循环来判断了,我没想到用indexOf这个方法的返回值是否为0来判断是否为前缀。
下面是按官方题解一写的代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs==null){
return null;
}
if(strs.length==0){
return "";
}
String result = strs[0];
for(int i=1;i<strs.length;i++){
while(strs[i].indexOf(result)!=0){
result = result.substring(0,result.length()-1);
if(result.equals("")){
return "";
}
}
}
return result;
}
}
作者:LeetCode
链接:链接
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结:
扫描二维码关注公众号,回复:
9817974 查看本文章