编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
整体思路:
遍历后面的字符串,将其依次将其与 ans 进行比较,再两两找出公共前缀,最终结果即为最长公共前缀。其详细讲解已经附在代码中。 此代码只是给大家提供一个参考,其还需更多的打磨。另外很多他人的博客还有其他的方法,大家也可以去看一些其他的方法,开阔思维。
代码题解:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string ans=strs[0];//先由ans设为初始值来进行比较
int n=strs.size();
if(strs.size()==0)
return "";
int min;//找到最短的字符串,公共前缀长度肯定小于它,这样进行单个字符对比时节省了时间,只需要对照前min个字符即可,后边的肯定不再符合要求。
min=strs[0].size();
for(int i=0;i<n;i++)
min=min>strs[i].size()?strs[i].size():min;//以上代码求最短字符串长度
for(int i=1;i<n;i++)//循环字符串数组,提取每一个字符串
{
int j=0;
for(;j<min;j++)//此时ans和循环到的字符串进行单个字符的比较,min在这个地方用,节约时间
{
if(ans[j]!=strs[i][j])//ans本身就是一个字符串,ans[j]表示字符串ans中的第j个字符,strs[i]是一个字符串,后边再加[j]则表示其字符串中的第j个字符,一旦发现不相等,则停止比较
break;
}
ans=ans.substr(0,j);//ans每一次比较都要进行更新,截取比较的相同的部分,然后继续与下一个字符串进行比较
if(ans.size()==0)//一旦哪一次的比较截取之后的ans为空,则说明没有任何相同的前缀,整体返回空即可。
return "";
}
return ans;
}
};
本人也是新手,刚开始练习,不足之处还请大家给出建议!