zoukankan      html  css  js  c++  java
  • 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和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    抗变与协变
    border-width实现博客园回复效果
    福利到!分享我的分页控件
    linq distinct 不够用了!
    sql server 使用nolock提升性能
    Graph-Based image segmentation method
    纹理特征提取【转】
    ROC曲线【转】
    LBP纹理特征[转自]
    SPAMS:稀疏建模工具箱
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8548161.html
Copyright © 2011-2022 走看看