LeetCode 14. Longest Common Prefix

问题链接

LeetCode 14. Longest Common Prefix

题目解析

求字符串数组的最长公共前缀。

解题思路

拍头一想可以想到直接暴力求解,仔细一想会不会有坑。想了半天没有想到什么好方法后,决定暴力一波,没想到过了,确实是简单题啊~

外循环表示列,即每个字符串第几个字符,内循环表示行,即第几个字符串。因为最长前缀不可能超过数组中最短的字符串,当遇到字符串结尾或者字符不相等时,即可返回答案。

注意字符串数组为空的情况下直接返回。

参考代码

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (strs.empty()) return "";
        string res = "";
        
        for (int i = 0; i < strs[0].size(); i++) {
            char c = strs[0][i];//每列首字母
            for (int j = 0; j < strs.size(); j++) {
                if (i == strs[j].size() || strs[j][i] != c)
                    return res;
            }
            res += c;
        }
        return res;
    }
};

精简版

思路是一样的,不过不需要额外的变量了,返回时直接利用 substr 返回子串。参考代码:

class Solution {
public:
    string longestCommonPrefix(vector<string> &strs) {
        if (strs.empty()) return "";
        if (strs.size() == 1) return strs[0];
        
        for (int i = 0; i < strs[0].size(); i++) {
            for (int j = 0; j < strs.size()-1; j++) {
                if (i >= strs[j+1].size() || strs[j][i] != strs[j+1][i])
                    return strs[j].substr(0,i);
            }
        }
        return strs[0];
    }
};

官方解法

https://leetcode.com/problems/longest-common-prefix/solution/。虽然有些简单问题复杂化,但分析过程和训练效果非常好,涉及到分治等思想,可以稍微看一看。


LeetCode All in One题解汇总(持续更新中...)

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


posted @ 2018-03-12 11:06  AlvinZH  阅读(216)  评论(0编辑  收藏  举报