找最长公共前缀,Longest Common Prefix,自己写的小算法,并吸取他人的精华进行改进,直接上代码,第一次写难免会有疏漏,还望大家指正
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//第10题:找最长公共前缀,Longest Common Prefix
//abcd
//ab
//abjklg
//输出:ab
//自己的思路:从第一个串的第一个字符开始匹配,后面的串与第一串进行匹配。如果都能匹配,则第一个串即为最长前缀,若不行,则从不行的那个字符直接推出循环
//原始版本:设置flag和flag1,flag用于确定哪个字符可以加入到最长匹配字符串中,flag1用于当遇到不能匹配的串时来结束外层循环
string longestCommonPrefixpre(vector<string>& strs)
{
int i,j,flag=0,flag1=0;
string com;
if(strs.size()==0) //一开始没有通过就是因为没有这行,当strs为空的时候没有考虑进去
return com;
for(i=0;i<strs[0].size();i++)
{
flag=0;
for(j=0;j<strs.size();j++)
{
if(strs[j][i]!=strs[0][i])
{
flag1=1;
break;
}
flag++;
}
if(flag==strs.size())
com.push_back(strs[0][i]);
if(flag1==1)
break;
}
return com;
}
//改进:两个标志位都可以不用,只要当内层循环遇到不匹配时直接return com即可
string longestCommonPrefix(vector<string>& strs)
{
int i,j;
string com;
if(strs.size()==0)
return com;
for(i=0;i<strs[0].size();i++)
{
for(j=0;j<strs.size();j++)
{
if(strs[j][i]!=strs[0][i])
{
return com;
}
}
com.push_back(strs[0][i]);
}
return com;
}
int main()
{
vector<string> v;
v.push_back("abcdf");
v.push_back("abcff");
v.push_back("ab");
v.push_back("abc");
//cout<<convert(s,2)<<endl;;
cout<<longestCommonPrefix(v)<<endl;
}
结束!谢谢
来源:oschina
链接:https://my.oschina.net/u/2451295/blog/501339