找最長公共前綴,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;
}
結束!謝謝