当前位置:   article > 正文

每日OJ题_字符串①_力扣14. 最长公共前缀_1<=strs.length<=200 0<=str[i].length<=200

1<=strs.length<=200 0<=str[i].length<=200

目录

力扣14. 最长公共前缀

解析代码1(两两比较)

解析代码2(统一比较)


力扣14. 最长公共前缀

14. 最长公共前缀

难度 简单

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成
  1. class Solution {
  2. public:
  3. string longestCommonPrefix(vector<string>& strs) {
  4. }
  5. };

解析代码1(两两比较)

        解法1(两两比较): 可以先找出前两个的最长公共前缀,然后拿这个最长公共前缀依次与后面的字符串比较,这样就可以找出所有字符串的最长公共前缀。

  1. class Solution {
  2. public:
  3. string longestCommonPrefix(vector<string>& strs) {
  4. string ret = strs[0];
  5. for(int i = 1; i < strs.size(); ++i)
  6. {
  7. ret = TowlongestCommonPrefix(ret, strs[i]);
  8. }
  9. return ret;
  10. }
  11. string TowlongestCommonPrefix(string& str1, string& str2)
  12. {
  13. if(str1.size() > str2.size())
  14. swap(str1, str2);
  15. for(int i = 0; i < str1.size(); ++i)
  16. {
  17. if(str1[i] == str2[i])
  18. continue;
  19. else
  20. return str1.substr(0, i);
  21. }
  22. return str1;
  23. }
  24. };

解析代码2(统一比较)

        解法2(统一比较):题目要求多个字符串的公共前缀,我们可以逐位比较这些字符串,哪一位出现了不同,就在哪一位截止。

  1. class Solution {
  2. public:
  3. string longestCommonPrefix(vector<string>& strs) {
  4. string ret = "";
  5. sort(strs.begin(), strs.end());
  6. for(int i = 0; i < strs[0].size(); ++i) // 遍历最小的字符串
  7. {
  8. int j = 1; // 第二行开始依次和第一行比较
  9. while(j < strs.size() && strs[0][i] == strs[j][i])
  10. { // 注意j不要越界
  11. ++j;
  12. }
  13. if(j == strs.size())
  14. {
  15. ret += strs[0][i];
  16. }
  17. else
  18. {
  19. break;
  20. }
  21. }
  22. return ret;
  23. }
  24. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/289092
推荐阅读
相关标签
  

闽ICP备14008679号