zoukankan      html  css  js  c++  java
  • leetcode腾讯精选练习之最长公共前缀(九)

    最长公共前缀

    题目

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

    思路

    思路有两种:

    第一种:纵向扫描:
            1.第一个字符串与余下的所有字符串逐个比较。首先,找出第一个字符串与第二个字符串的最长公共前缀;然后让这个公共前缀和第三个字符串比较找出它们的公共前缀,依次直至遍历完所有的字符串。
            2.第一个字符串与第二个字符串从头开始比较直到遇到不相同的字符为止,并记录最后一个相同的字符的索引right,然后第一个字符串与第三个字符串从头开始遍历时,如果遍历至索引right处还没遇到不同的字符,则停止遍历,从0到right的字符串即为这三个字符串的最长公共前缀,如果没有遍历至索引right处,就有不同的字符,则更新right的值,直至遍历完所有的字符串。
    第二种:横向扫描:
            1.同时遍历所有的字符串的第i个字符是否与第一个字符串的第i个字符是否相同,如果出现不相同,那么最长公共前缀即到上一个字符为止。

    代码

    纵向扫描:

    string longestCommonPrefix(vector<string>& strs) {
        if(strs.size() <= 0)
        {
            return "";
        }
        int right = strs[0].length();
        for(int i = 1;i < strs.size();i++)
        {
            for(int j = 0; j < right  ; j++)
            {
                if(strs[0][j] != strs[i][j])
                {
                    right = j;
                    break;
                }
            }
    
        }
        return strs[0].substr(0,right);
    }
    

    横向扫描:

    string longestCommonPrefix(vector<string>& strs) {
        if(strs.size() <= 0)
        {
            return "";
        }
        int right = strs[0].length();
        for(int i = 0 ; i < right; i++)
        {
            for(int j = 1 ; j < strs.size(); j++)
            {
                if(strs[j][i] != strs[0][i])
                {
                    right = i;
                    break;
                }
            }
        }
        return strs[0].substr(0,right);
    }
    

    总结

    正常思路一般都会是先找出两个字符串的最长公共前缀,在用这个公共前缀和余下的字符串逐一寻找共同的前缀。
    横向的思维是在网上看的,需要经常练习。拓宽思路,加油。

  • 相关阅读:
    关于JDK和eclipse的安装和汉化
    关于Android SDK Manager更新速度慢的解决方法
    Navicat Premium 11破解补丁下载及安装方法
    win8.1下无法运行vc++6.0的解决方法
    在Editplus中配置java的(带包)编译(javac)和运行(java)的方法
    关于在Editplus中设置内容提示比如syso的快捷输出的方法
    关于win8/win8.1系统不能调节亮度的解决办法
    JDK的安装和Java环境变量配置
    关于classpath
    Genymotion模拟器的安装及常见问题解决方法
  • 原文地址:https://www.cnblogs.com/zh20130424/p/12289197.html
Copyright © 2011-2022 走看看