力扣 题目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; }