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

Leetcode 14——Longest Common Prefix的更多相关文章

  1. Leetcode 14. Longest Common Prefix(水)

    14. Longest Common Prefix Easy Write a function to find the longest common prefix string amongst an ...

  2. [LeetCode] 14. Longest Common Prefix 最长共同前缀

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

  3. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串

    所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...

  4. [LeetCode] 14. Longest Common Prefix

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

  5. Java [leetcode 14] Longest Common Prefix

    小二好久没有更新博客了,真是罪过,最近在看linux的东西导致进度耽搁了,所以今晚睡觉前怒刷一题! 问题描述: Write a function to find the longest common ...

  6. [leetcode]14. Longest Common Prefix 最长公共前缀

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

  7. [LeetCode] 14. Longest Common Prefix ☆

    Write a function to find the longest common prefix string amongst an array of strings. 解法: 广度优先搜索:先比 ...

  8. [LeetCode]14. Longest Common Prefix最长公共前缀

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

  9. LeetCode——14. Longest Common Prefix

    一.题目链接:https://leetcode.com/problems/longest-common-prefix/ 二.题目大意: 给定若干个字符串,找出它们的最长公共子串. 三.题解: 这道题目 ...

随机推荐

  1. hdu5798 Stabilization

    温习一下多校的题目 这题主要抓住一点,亦或值的贡献是固定的 所以按位搜索即可 #include<bits/stdc++.h> using namespace std; typedef lo ...

  2. windows打开和关闭默认共享方法汇总

    Windows启动时都会默认打开admin$ ipc$ 和每个盘符的共享,对于不必要的默认共享,一般都会把它取消掉,可当又需要打开此默认共享时,又该从哪里设置呢.经过自己的验证,汇总出一下方法. 一: ...

  3. 【转】Nginx的启动、停止与重启

    Nginx的启动.停止与重启 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sb ...

  4. PyCharm链接服务器同步代码

    准备工作 1:服务器(本地虚拟安装或是云服务器)这里我使用的是腾讯云服务器 2:PyCharm开发软件 3:XShell 软件 第一步:打开PyCharm如下图新建一个项目 Location:选择代码 ...

  5. 【BZOJ2442】修建草坪(动态规划,单调队列)

    [BZOJ2442]修建草坪(动态规划,单调队列) 题面 权限题..洛谷 题解 设\(f[i]\)表示前\(i\)个里面选出来的最大值 转移应该比较显然 枚举一个断点的位置,转移一下就好 \(f[i] ...

  6. Poj2723:Get Luffy Out

    题意 给出 n 对钥匙,每对只能挑一把使用,每把只能用一次,当一对钥匙中的一把被使用后,另一把也就不能再用了:然后给出 m 道门,每个门都有两把钥匙可以打开,问最多能开几道门(按给出的顺序开). So ...

  7. 组Json以及拆分Json

    例子: 组Json串: procedure TForm8.Button4Click(Sender: TObject); var i: Integer; jfields, jitems, jo: ISu ...

  8. 微信小程序初探【类微信UI聊天简单实现】

    微信小程序最近很火,火到什么程度,只要你一打开微信,就是它的身影,几乎你用的各个APP都可以在微信中找到它的复制版,另外官方自带的跳一跳更是将它推到了空前至高的位置.对比公众号,就我的感觉来说,有以下 ...

  9. 【翻译】《向“弹跳球”演示程序添加新功能》 in MDN

    文章地址: https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/%E5%90%91%E2%80%9C%E5%BC%B9% ...

  10. jmockito模拟方法中参数如何指定

    在做单元测试的时候,经常会遇到mock类的方法的情景.在写单测过程中,遇到一些问题,比较困惑,便做了一些测试,并得出一个结论: 在mock类的方法时,当符合 (mock参数).equals(实际调用过 ...