zoukankan      html  css  js  c++  java
  • Leetcode No.14 Longest Common Prefix最长公共前缀(c++实现)

    1. 题目

    1.1 英文题目

    Write a function to find the longest common prefix string amongst an array of strings.

    If there is no common prefix, return an empty string "".

    1.2 中文题目

    编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ""。

    1.3输入输出

    输入 输出
    strs = ["flower","flow","flight"] "fl"
    strs = ["dog","racecar","car"] ""

    1.4 约束条件

    • 1 <= strs.length <= 200
    • 0 <= strs[i].length <= 200
    • strs[i] consists of only lower-case English letters.

    2. 分析

    2.1 一般方法

    看到这道题,最简单的方法就是两层for循环,最外层是对第一个字符串进行遍历(其实第几个字符串都无所谓),内层是对字符数组进行遍历,意思也就是先看所有字符串第一个元素是否都一样,再看第二个,第三个,以此类推,当遇到有不同的时候,就可以跳出外层循环。代码如下:

    class Solution {
    public:
        string longestCommonPrefix(vector<string>& strs) {
            string ans;
            for (unsigned int i = 0; i < strs[0].size(); i++)
            {
                unsigned int count = 0;
                for (unsigned int j = 0; j < strs.size(); j++)
                {
                    char temp = strs[0][i];
                    if (i != strs[j].size() && strs[j][i] == temp)//
                        count++;
                    else
                        goto here;
                    if (count == strs.size())
                        ans += strs[0][i];
                }
            }
        here:
            return ans;
        }
    };
    

    2.2 改进算法(贼好使)

    上述算法使用goto跳出两层循环,而goto的使用很多人是不太推荐使用的,同时联想到for循环的第二项就是一个判断语句,因此可以将goto判断语句改到for循环里,具体代码如下:

    class Solution {
    public:
        string longestCommonPrefix(vector<string>& strs) {
            string ans;
            for (unsigned int i = 0; i < strs[0].size(); i++)
            {
                unsigned int count = 1;
                unsigned int j = 1;
                int temp = strs[0][i];
                for (; j < strs.size() && i != strs[j].size() && strs[j][i] == temp; j++)
                    count++;
                if (count == strs.size())
                    ans += strs[0][i];
                else
                    break; 
            }
            return ans;
        }
    };
    

    这个算法时间消耗0ms,空间消耗9M,非常不错!

    作者:云梦士
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    47. VUE-路由是什么?如何实现页面不请求刷新?
    21. SpringBoot 实现国际化 [i18n]
    20. SpringBoot 默认访问首页 以及 加载静态资源
    46. VUE 脚手架 —— vue ui 管理 以及 查看原始配置
    45. VUE ClI4 创建项目
    44.VUE2 项目目录结构解析 和 Runtime-Compiler和Runtime-only的区别
    2 . Mybatis — 增-删-改
    19. SpringBoot 扩展 SpringMVC功能、 接管、自定义SpringMVC
    17. Thymeleaf 模板 的 使用 和 语法
    16. SpringBoot 模板引擎
  • 原文地址:https://www.cnblogs.com/yunmeng-shi/p/15040005.html
Copyright © 2011-2022 走看看