问题描述:
Write a function to find the longest common prefix string amongst an array of strings.
从多个字符串中找到他们共同的最长的前缀子串
解题思路:
首先找到这组字符串中最短的那个,以它作为基准进行比较,不断地对它进行截尾,直到找到最长公共子串
耗时10ms
class Solution { public: string longestCommonPrefix(vector<string> &strs) { string shortestStr;//最短的字符串 int minLen = 1000000; //为空或者vector中仅有一个字符串,无需计算直接返回 if(strs.empty()) return ""; if(strs.size() == 1){ return strs[0]; } for(int i=0; i<strs.size(); i++){ if (strs[i].length() == 0) return ""; if(strlen(strs[i].data()) < minLen){ minLen = strlen(strs[i].data()); shortestStr = strs[i]; } } int k=0,j=0; //minLen=minLen<=1?1:minLen; string res=""; while(j<strs.size()){ if(strs[j].substr(0,minLen) == shortestStr.substr(0,minLen)){ k++; j++; if(k==strs.size()){//所有的字符串都有这么一个公共前缀,保存下来并结束循环 res = shortestStr.substr(0,minLen); break; } continue; } else{ minLen--; k=0; j=0;//如果这些子串中有一个不满足,则最短字符串截尾一位,作为新的可能的公共前缀,一切从头开始比较 } } return res; } };