[LeetCode] Longest Common Prefix

这里写图片描述
字符串的最长公共前缀
先写以个两个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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值