14. 最长公共前缀easy

首先想到了纵向扫描,也确实是这样实现的
思路即比较每个字符串对应位置字符是否相等。
这种方法应该是最容易想到的,反正就是暴力求解

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int sz=strs.size();
        if(sz==0)
            return "";
        if(sz==1)
            return strs[0];
        string result="";
        vector<int>points(sz,0);
        for(int i=0;i<strs[0].size();++i){
            int isequal=1;
            char c=strs[0][i];
            for(int j=1;j<sz;++j)
                if(i>=strs[j].size()||strs[j][i]!=c)
                    return result;
            result+=c;
        }
        return result;
    }
};

然后看了下各路大神的解释
1.横向扫描
保存第一个字符串作为起始数据s,然后向后依次和每个字符串比较,和字符串逐个字符比较时遇到不同的就把s中相同的保留下来,后面不同的截掉,直至和最后一个字符串比较完成或者s变为空。最后s即为最长公共前缀
2.二分查找
找到所有字符串中最短的那个,然后比较其中间字符与其他字符串中对应位置的字符是否相同,直至找到最长公共前缀。
3.分治法(虽然我感觉不太适合解此问题,不过真的是长见识了)
可以将其分解成两个子问题,这两个子问题的结果的最长公共前缀即为所有字符串的最长公共前缀,同理,子问题又可以分解为子问题,直至每个子问题都是一个字符串。
*********以上四种都是官方给出的题解
4.排序
评论区思路:给左右字符串排序,只需找首尾两个字符串的最长公共前缀即可!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值