文章标题

Leetcode Algorithm 014. Longest Common Prefix

Longest Common Prefix
给定多个字符串,找出它们之间的最长公共前缀

解题思路

所有字符串的公共前缀必须同时出现在每个字符串的开头,比如"string""str""stable"的公共前缀是"st""abc""bcd""cdf"的公共前缀是""(空串)。

有了以上的了解,我们很容易可以想到,我们可以把第一个串作为基准串,遍历第一个串的每一个字符,并且与其它串上该位置的字符作匹配检验。当这个字符存在于所有的字符串中的时候,我们任务它属于公共前缀的一部分。

注意,当某个字符串的长度比基准串要短时,直接可以退出循环。当然,我们也可以把最短的那个字符串作为基准串,这样的循环结束的条件相对好写。

代码

#include<iostream>
#include<vector>

using namespace std;

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        string result = "";

        int n = strs.size();
        if (n > 0) {
            for (int i = 0; i < strs[0].size(); i++) {
                char c = strs[0][i];
                bool stop = false;

                for (int j = 1; j < n; j++) {
                    if (i == strs[j].size() || c != strs[j][i]) {
                        stop = true;
                        break;
                    }
                }

                if (!stop) {
                    result += c;
                } else {
                    break;
                }
            }
        }

        return result;
    }
};

struct TestCase {
    vector<string> strs;

    void addStr(string str) {
        strs.push_back(str);
    }
};


int main() {
    Solution s;
    int t;

    cin >> t;
    TestCase testcase[t];

    for (int i = 0; i < t; i++) {
        int n;
        cin >> n;

        for (int j = 0; j < n; j++) {
            string str;
            cin >> str;
            testcase[i].addStr(str);
        }

        string result = s.longestCommonPrefix(testcase[i].strs);

        cout << result << endl;
    }
}

测试样例

第一行是样例的数目t,之后是每组样例,第一行是字符串的数目n,接下来的n行是n个字符串。

3

3
string
str
stable

2
abcd
efgh

0

输出

st

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值