关闭

[LeetCode] Longest Common Prefix

228人阅读 评论(0) 收藏 举报
分类:

这里写图片描述
字符串的最长公共前缀
先写以个两个string比较的,之后O(n)在vector中滑动比较

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int i = 1;
        string com_s;
        if(strs.size()==0)  return string("");
        if(strs.size()==1)  return strs[0];
        com_s = strs[0];
        while(i!=strs.size())
            com_s = check_two(com_s,strs[i++]);
        return com_s;


    }
    string check_two(string &s1, string &s2){
        int i;
        for(i = 0; i != min(s1.size(),s2.size()); ++i)
            if(s1[i]!=s2[i])
                break;
        return s1.substr(0,i);
    }
};

当然用c写也是可以的check_two部分找到不相同的字符时要注意是否为\0,是\0就可以直接返回s1,没有到达\0将其变成\0即可

#define min(x,y) (x)<(y)?(x):(y)
char* check_two(char *s1, char *s2){
    int i =0;
    char *tmp;
    if(strlen(s1)>strlen(s2)){
        tmp = s1;
        s1 = s2;
        s2 = tmp;
    }
    for(i = 0; i != strlen(s1); ++i)
        if(s1[i]!=s2[i])
            break;
    if(i!=strlen(s1))
        s1[i] = '\0';
    return s1;

}
char* longestCommonPrefix(char** strs, int strsSize) {
    if(strsSize==1) return strs[0];
    if(strsSize==0) return "";
    char *com_s = strs[0];
    int i =1;
    while(i!=strsSize)
        com_s = check_two(com_s,strs[i++]);
    return com_s;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:56240次
    • 积分:2175
    • 等级:
    • 排名:第17473名
    • 原创:162篇
    • 转载:9篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论