原题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
思路:
因为求的是最长公共前缀,所以维护最短的公共前缀即可,设置一个公共前缀的字符串,将其与各个字符串依次比较,若碰到更短的前缀就缩短这个字符串。
代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==1)
return strs[0];
String p=strs[0];
boolean target=false;
for(int i=1;i<strs.length;i++)
{
if(strs[i].length()==0)
return "";
for(int j=0;j<p.length()&&j<strs[i].length();j++)
{
if(p.charAt(j)!=strs[i].charAt(j))
{
p=p.substring(0,j);
target=true;
continue;
}
}
if(target==false&&p.length()>strs[i].length())
{
p=strs[i];
}
target=false;
}
return p;
}
}
复杂度分析:
显然 ,时间复杂度为:O(n^2)。