题目:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
例:输入: [“flower”,“flow”,“flight”]
输出: “fl”
第一次提交,我看到这个的第一想法是暴力匹配(应该是其他的算法运用不熟练)。
思路:
- 把给定的字符串数组的第一个元素对应的字符串转化为字符数组
- 如果它为空则返回空字符串,如果给定的字符串数组只有一个元素,那么返回这个字符数组的第一个字符
- 如果字符串数组为空则返回空字符串
- 遍历字符串数组的其余元素,把他们分别转化为字符数组,与开始转化的第一个字符数组里的字符进行匹配
- 如果相同的话把该字符加入到空字符串中,不同则返回
class Solution3{
public String longestCommonPrefix(String[] strs) {
/*
String str ="";
char[] str1 = null;
char[] str2;
if(strs.length==0) {
return str;
}
str1=strs[0].toCharArray();
if(strs.length==1 && str1.length!=0) {
str=str+str1[0];
}
for(int i=0;i<str1.length;i++) {
if(str1.length==0) {
return str;
}
char temp =str1[i];
for(int j=1;j<strs.length;j++) {
str2=strs[j].toCharArray();
if(str2.length==0|| i==str2.length) {
return str;
}
if(str2[i]!=temp) {
return str;
}
else if(str2[i]==temp && j==strs.length-1) {
str =str+temp;
break;
}
}
}
return str;
}
}
第二次提交
这次看了一下大佬的题解,发现自己果然对字符串的方法掌握不熟练,没有用到charAt()方法和substring()
思路:
- 先判断给的字符串数组是否为空,为空则返回空字符串
- 接着把字符串数组的第一个元素对应的字符串取出来
- 遍历剩余的字符串,使他与取出的字符串匹配,如果相同的部分则保留,不同则返回
class Solution3{
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0)
return "";
String ans = strs[0];
for(int i =1;i<strs.length;i++) {
int j=0;
for(;j<ans.length() && j < strs[i].length();j++) {
if(ans.charAt(j) != strs[i].charAt(j))
break;
}
ans = ans.substring(0, j);
if(ans.equals(""))
return ans;
}
return ans;
}
}