LeetCode No.14 最长公共前缀

LeetCode No.14 最长公共前缀

Problem

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

输入输出
[“flower”,“flow”,“flight”]“fl”
[“dog”,“racecar”,“car”]“”(解释: 输入不存在公共前缀)

说明 : 所有输入只包含小写字母 a-z 。

Solving

要想获得公共前缀,可以以字符串数组的第一个字符串为基准,依次遍历该字符串的的每一个字符,同时与后面每一个字符串同一位置的字符比较是否相同,如果相同就依次向后递推进行同样的比较,如果每个字符串在该位置上的字符都与第一个字符串在该位置上的字符相同,则该字符属于公共前缀的一部分;如果出现不同的情况则该字符不属于公共前缀的一部分,同时循环也随之结束。

特殊情况:

  1. 当字符串数组为空([])时,直接返回 “” 即可。
  2. 当字符串数组的第一个字符串为空(如 ["", “flower”, “flow”])时,上述方法同样成立,因为循环在对比第一个字符串和后面出现的第一个非空字符串的第一位字符后即会终止循环。

Code(C++)

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int i = 0;  
        int j = 1;
        if(strs.size() == 0 ){  //当字符串数组为空时返回空字符;
            return "";
        }
        while(i < strs[0].length()){  //遍历数组中第1个字符串(为空也成立)的各个字符;
            while(j < strs.size()){   //从数组中的第2个字符串开始依次遍历;
                if(strs[0][i] == strs[j][i]){  //满足条件则两字符串的第i个字符相同,继续循环,否则跳出内层循环;
                    j++;
                }
                else{
                    break;
                }
            }
            if(j == strs.size()){  //满足条件则存在公共前缀,继续循环,否则跳出外层循环;
                i++;
                j = 1;
            }
            else{
                break;
            }
        }
        return (strs[0].substr(0, i));  //返回第1个字符串从起始位置开始长度为i的字符串即为公共前缀; 
    }
};

执行用时:4 ms
内存消耗:10.6 MB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值