题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
思路一
构建一个StringBuffer来记录最终结果,使用i记录下标,循环遍历给定字符串数组,若每一个字符串第i个字符都相同则把第i个字符加入StringBuffer,巧妙利用java异常,当出现下表越界异常时直接结束程序即可。
思路一改进
研究发现,根本不需要StringBuffer来记录,只需知道最大下标i,即可得到答案,所以可以进行优化。
思路二
创建一个String类型变量记录结果,初始值为字符串数组的第一个字符串,然后遍历字符串数组即可。每一次的结果为结果变量与第i个字符串的最长公共前缀。
代码
public String longestCommonPrefix(String[] strs) {
StringBuffer stringBuffer = new StringBuffer();
//下标
int i =0;
try{
while(true){
for (int j=0;j<strs.length-1;j++){
if(strs[j].charAt(i)!=strs[j+1].charAt(i)){
//一旦发现不相等,就结束了
return stringBuffer.toString();
}
}
stringBuffer.append(strs[0].charAt(i));
i++;
}
}catch (Exception e){
return stringBuffer.toString();
}
}
public String longestCommonPrefix(String[] strs) {
//下标
int i =0;
try{
while(true){
for (int j=0;j<strs.length-1;j++){
if(strs[j].charAt(i)!=strs[j+1].charAt(i)){
//一旦发现不相等,就结束了
return strs[0].substring(0,i);
}
}
i++;
}
}catch (Exception e){
return strs[0].substring(0,i);
}
}
(优化后的代码通不过,百思不得其解,希望有知道的小伙伴告诉我一下,万分感谢)
class Solution {
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;
}
}