第九周作业1(LeetCode14)

1. 题目描述

Write a function to find the longest common prefix string amongst an array of strings.

2. 解决思路

我们知道字符串前缀的定义是不包括该字符串最后一个字符的其他字符的有序组合,但在这道题中,最长的公共前缀应该可以包括最后一个字符,相当于前缀加空字符串(而且这个对算法不影响)。

所以这道题我主要的解题思路就是是最长公共字符串肯定不会比整个数组中最短的长,顶多相等。

基于此,我们假设第一个是公共串,让他和后面的挨个对比,如果它比后面的短,那么就逐个字符对比,如果共同的比当前的短则截断,这样遍历一次即可获得最短公共串,也即最长的公共前缀。

3. 完整代码

#include<iostream>
#include<string>
#include<vector>
using namespace std;

string longestCommonPrefix(vector<string> strs){
    if (strs.size()==0)
        return "";
    string prefix = strs[0];    //定义最长的公共前缀并赋初值
    for (int i = 1; i < strs.size(); i++){
        //将当前最长的公共前缀和当前数组中的对比,把小的那个作为长度
        int len = prefix.length() > strs[i].length() ? strs[i].length() : prefix.length();

        int j = 0;
        for (j = 0; j < len; j++){
            //逐个字符比较,不等的时候退出
            if (prefix.at(j) != strs[i].at(j))
                break;
        }
        //退出的j即当前的最小,整个遍历结束后就是整个的最小了
        prefix = prefix.substr(0, j);
    }
    return prefix;
}




int main()  {
    vector<string> strs;

    for (int i = 0; i<100; i++){
        string temp;
        cin >> temp;
        if(cin.peek() != '\n'){
            strs.push_back(temp);
        }
        else
            break;
    }

    string result = longestCommonPrefix(strs);
    cout << "最长的公共前缀是:" << result << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值