标签:int 14 后缀 res 力扣 strs length string
CommonPre函数:把字符串数组一分为二,分别求出左右两边数组的最长公共前后缀 left 和 right,然后将两者进行比较得到最终的 最长公共前后缀
1 class Solution { 2 public: 3 string longestCommonPrefix(vector<string>& strs) { 4 return CommonPre(strs,0,strs.size() - 1); 5 } 6 7 private: 8 string CommonPre(vector<string>& strs,int l,int r){ 9 if(l == r) return strs[l]; //数组里只包含一个字符串时,返回这个字符串 10 int mid = (l + r) / 2; 11 string left = CommonPre(strs,l,mid); //左边数组的最长公共前后缀 12 string right = CommonPre(strs,mid + 1,r); //右边数组的最长公共前后缀 13 int ll = left.length() > right.length() ? right.length() : left.length(); 14 string res; //接下来就是比较左右两边最长公共前后缀,得到数组的最长公共前后缀 15 for(int i = 0;i < ll;i ++){ 16 if(left[i] == right[i]) 17 res += left[i]; 18 else 19 break; 20 } 21 return res; 22 } 23 };
------------------分割线------------------
其他解法
把第一个字符作为最开始的最长公共前后缀res,然后拿第二个字符串和它自己(res)比较得出两者最长公共前后缀,更新res,然后res继续和第三个字符串比较......直到和最后一个字符串比较完,得到最终结果。(如果中间发现res为空则可直接返回res)
1 class Solution { 2 public: 3 string longestCommonPrefix(vector<string>& strs) { 4 string res = strs[0]; 5 for(int i = 1;i < strs.size();i ++){ 6 res = CommonPre(res,strs[i]); 7 if(res.empty()) return res; 8 } 9 return res; 10 } 11 12 private: 13 string CommonPre(string s,string t){ //求两个字符串最长公共前后缀可按自己想法写,譬如这里还可用双指针求 14 string res; 15 int ll = s.length() > t.length() ? t.length() : s.length(); 16 for(int i = 0;i < ll;i ++){ 17 if(s[i] == t[i]) 18 res += s[i]; 19 else 20 break; 21 } 22 return res; 23 } 24 };
标签:int,14,后缀,res,力扣,strs,length,string 来源: https://www.cnblogs.com/balabalabubalabala/p/16539364.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。