力扣 题目14-- 最长公共前缀

题目


题解


 

1.先找到最短的那个字符 因为公共前缀最长的情况下就是最短的字符本身

2.用最短字符的长度从右往左遍历并与其他字符的相同位置比较(取子字符串用substr 比较用compare) 如果用完全匹配成功的保存一下,然后直接跳出循环即可,这样比起从左向右省下了不少时间

代码


#include<iostream>
#include<string>
#include<vector>
using namespace std;
int minimum(vector<string>& strs) { 
    int minimum = INT_MAX;
    int subscript = 0;
    for (int i = 0; i < strs.size(); i++) {
        if (minimum > strs[i].size()) {
            minimum = strs[i].size();
            subscript = i;
        }
    }
    return subscript;
}
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int j = 0;
        int mini = minimum(strs);
        string Longest = "";
        for (int i = strs[mini].size(); i >-1; i--) {
            for (j = 0; j< strs.size(); j++) {
                if (strs[mini].substr(0, i).compare(strs[j].substr(0, i))!=0) {
                    break;
                }
            }
            if (j == strs.size()) {
                Longest = strs[mini].substr(0, i);
                break;
            }
        }
        return Longest;
    }
};

int main() {
    Solution sol;
    vector<string> strs = { "flower","flowe","flowes" };
    string Longest=sol.longestCommonPrefix(strs);
    cout << Longest << endl;
}

 

posted @ 2022-04-01 12:56  无聊的阿库娅  阅读(26)  评论(0编辑  收藏  举报