leetcode

南楼画角 提交于 2020-04-25 08:15:28

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

结束!谢谢

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!