leetcode - 14:Longest Common Prefix

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

結束!謝謝

相關文章
相關標籤/搜索