Leetcode 14 -- 最长公共前缀

题目链接如下:Leetcode 14


大致描述一下题目:

题目给出一个字符串数组,编写一个函数找出最长公共前缀,如果没有,返回空


解题思路:

基本上有两个思路:横向扫描和纵向扫描

假设我们有一个str[ ]数组,"flow" "flower" "flight"

横向扫描就是遍历所有字符串,先假设目标字串为str[0],然后和下一个字符串每个字符逐一比较,当遇到不一样的元素用substr截取保存为目标子串,然后再去与下一个字符串比较。

纵向扫描对所有字符串str[i][0],str[i][1]这样一个一个比较过去,遇到不一样的,则返回str[i][j]。


附上代码如下(C++):[横向扫描]

/*******************************************************************************
Copyright © 2018-20xx Qiao Chuncheng, All Rights Reserved.
File name:		014[最长公共前缀].cpp
Author:			Qiao Chuncheng
Version:		v1.0
Date:			2018-04-11
*******************************************************************************/
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (strs.size() == 0)//样例数据就是空的Vector
		return "";

        string tempStr = strs[0];
        for (size_t i = 1; i < strs.size(); i++)
        {
            if (tempStr.size() == 0 || strs[i].size() == 0)
                return "";

            size_t len = strs[i].size() > tempStr.size() ? tempStr.size() : strs[i].size();
            size_t j;
            for (j = 0; j < len; j++)
            {
                if (tempStr[j] != strs[i][j])
                {
                    //tempStr = strs[i].substr(0, j);
                    break;
                }
            }
            tempStr = strs[i].substr(0, j);//单步调试发现这个需要在循环外
        }
        return tempStr;
    }
};



猜你喜欢

转载自blog.csdn.net/u010281829/article/details/80075349
今日推荐