题目

题解
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;
}