博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 14——Longest Common Prefix
阅读量:5239 次
发布时间:2019-06-14

本文共 2492 字,大约阅读时间需要 8 分钟。

  题目: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;}

 

转载于:https://www.cnblogs.com/GoForMyDream/p/8569017.html

你可能感兴趣的文章
【转】Unity3.5 GameCenter基础教程
查看>>
[原]IOS 设备基本信息
查看>>
java 中使用log4j
查看>>
时钟效果
查看>>
C#中使用goto
查看>>
NSData转NSString
查看>>
分享Kali Linux 2016.2第49周虚拟机
查看>>
Xamarin Android项目真机测试闪退
查看>>
(转)C# 泛型详解
查看>>
Excel公式巧用
查看>>
expect实现配置机器信任关系
查看>>
0821: aniy hadoop 1-6的步骤安装总结。。我怕自己忘记
查看>>
常规问题(标签默认边距,文字设置行高)
查看>>
进程与进程描写叙述符(task_struct)
查看>>
Docker镜像制作
查看>>
微信小程序支付功能
查看>>
COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
查看>>
mysql通过经纬度查询400公里范围内的小区
查看>>
判断数据类型几种方法
查看>>
Tomcat+Servlet面试题都在这里
查看>>