zoukankan      html  css  js  c++  java
  • Leetcode 14——Longest Common Prefix

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

      很简单的一个描述,最长公共前缀,首先想到的是用递归,既然是找公共前缀,那肯定要两个进行比较,所以把第一个和除了第一个之外的字符串数组看作两个进行比较,再对后面的进行递归就好了,上代码。

    public static String longestCommonPrefix(String[] strs) {
            if (strs.length == 0)
                return "";
            if (strs.length == 1)
                return strs[0];
    
            return help1(strs);
        }
        //对进入的字符串数组进行“分开” 操作
        public static String help1(String[] strs) {
            String[] newStrs = new String[strs.length - 1];
            for (int i = 0; i < strs.length - 1; i++) {
                newStrs[i] = strs[i + 1];
            }
            return help2(strs[0], newStrs);
        }
        //分开之后,进入help2,迭代“分开”。
        public static String help2(String str, String[] strs) {
            StringBuffer returnString = new StringBuffer();
            String[] newStrs = new String[strs.length - 1];
            if (str != "") {
                if (strs.length == 1) {
                    // 比较 取公共前缀
                    for (int i = 0; i < str.length() && i < strs[0].length(); i++) {
                        if (str.charAt(i) != strs[0].charAt(i)) {
                            break;
                        }
                        returnString.append(str.charAt(i));
                    }
                } else {
                    for (int i = 0; i < strs.length - 1; i++) {
                        newStrs[i] = strs[i + 1];
                    }
                    return help3(str,help2(strs[0], newStrs));
                }
                return returnString.toString();
            }
            return "";
        }
        
        //对迭代返回的数据进行比较 
        public static String help3(String str1,String str2) {
            StringBuffer returnString = new StringBuffer();
            for (int i = 0; i < str1.length() && i < str2.length(); i++) {
                if (str1.charAt(i) != str2.charAt(i)) {
                    break;
                }
                returnString.append(str1.charAt(i));
            }
            return returnString.toString();
        }

      之后看了官方的solution,思路大体上是差不多的,但是实现很巧妙。先比较第一第二个,再取一二的公共前缀来比较第三个,不过这里比较的方式有点特殊。先看第二个字符串里面index(第一个字符串)是不是等于0,是的话就继续用第一个字串比较后面的(因为第一个字符串是第二个字符串的前缀了,index()为0),如果不为0,也就是说第一个字符串不是第二个的前缀,那么就把第一个字符串缩短一位,再比较,直到第一个字符串为空。上代码:

      

    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) return "";
        String prefix = strs[0];
        for (int i = 1; i < strs.length; i++)
            while (strs[i].indexOf(prefix) != 0) {
                prefix = prefix.substring(0, prefix.length() - 1);
                if (prefix.isEmpty()) return "";
            }        
        return prefix;
    }
  • 相关阅读:
    otter安装、使用
    windows下xampp安装rabbitmq的PHP扩展AMQP
    CentOS7下安装RabbitMQ
    CentOS7下开放端口
    CentOS7下安装Redis
    @b.windows.last.use
    Rspec基本语法
    ruby firefox23报错:waiting for evaluate.js load failed
    notepad++上配置ruby执行环境
    cucumber的hooks
  • 原文地址:https://www.cnblogs.com/GoForMyDream/p/8569017.html
Copyright © 2011-2022 走看看