14.最长公共前缀

题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。

思路:
1.按顺序比较下来:3个字符串的最长公共前缀一定被包含在前2个字符串的最长公共前缀之中,同理,N个字符串的前缀一定是其中(N-1)个字符串的最长公共前缀与第N个字符串的最长公共前缀。
2。关于 for auto::
想要拷贝元素:for(auto x:range)
想要修改元素 : for(auto &&x:range)
想要只读元素:for(const auto& x:range)
3.
关于substr*:
形式:s.substr(pos, n)
解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
代码:

class Solution {
public:
    string longestCommonPrefix(vector& strs) {
        string r = strs.size()?strs[0]:"";
        //第一句代码含义为:若有输入值,则字符串r的值即为数组第一个字符串,否则为空字符串
        for(auto s:strs)//将每一个str拷贝给s
        {
            while(r!=s.substr(0,r.size()))
            {
                r=r.substr(0,r.size()-1);
                if(r=="")
                    return "";
            }
            //当下一个字符串的r长度的前缀不等于r时,就让r的长度减1
        }
        return r;
    }
};
image.png

你可能感兴趣的:(14.最长公共前缀)