LeetCode —— 14. Longest Common Prefix解题思路

来源:互联网 发布:web原型设计工具 知乎 编辑:程序博客网 时间:2024/05/17 00:02

题目:Write a function to find the longest common prefix string amongst an array of strings.(写一个函数,找出字符串数组中最长公共前缀)

思路:(我是基于正向考虑的,即从最长公共前缀的第一个字符开始匹配,直到最长公共前缀的最后一个字符为止)先处理两种特殊情况:

1.如果需要判断的字符串集合strs为空,则直接返回结果“”;

2.如果需要判断的字符串集合strs中只要一个元素,则最长公共前缀即为该元素本身,直接返回该元素即可;

一般情况:

先遍历一遍字符串数组strs,找到最短的一个字符串shortestStr,以此为判断标准。每次取shortestStr的一个字串对字符串集合strs中的其它字符串进行前缀匹配,若匹配成功,则该字串为最长公共前缀的一部分,然后使字串在原来的基础上长度增加一,继续进行新一轮的匹配,直到字串等于shortestStr本身为止,否则匹配失败。输出“”;


代码如下:

class Solution {    public String longestCommonPrefix(String[] strs) {        if(strs.length == 0)    return "";        if(strs.length == 1)    return strs[0];        String shortestStr = strs[0];        String ans = "";        int i, shortestStrIndex = 0;        for(i = 1; i < strs.length; i++) {            if(shortestStr.length() > strs[i].length()) {                shortestStr = strs[i];            }        }        while(shortestStrIndex < shortestStr.length()) {            for(i = 0; i < strs.length; i++) {                if(strs[i].indexOf(shortestStr.substring(0, shortestStrIndex+1)) < 0)                    break;                else if(!strs[i].substring(0, shortestStrIndex+1).equals(shortestStr.substring(0, shortestStrIndex+1)))                    break;            }            if(i == strs.length)                ans = shortestStr.substring(0, shortestStrIndex+1);            shortestStrIndex++;        }        return ans;    }}


Ps:提交代码之后,通过了。但是运行时间略长,看了一下运行时间最短的代码,才发现第一步没必要找出最短的字符串,因为最长公共前缀是固定的啊。。。这一步操作多余了。参考下面给出LeetCode 记录中最短运行时间的代码,可以发现,这题要是从逆向出发,直接考虑最长公共前缀,则要简单的多。


class Solution {    public String longestCommonPrefix(String[] strs) {        if(strs==null || strs.length==0) return "";        String prefix = strs[0];        int i=1;        while(i<strs.length){            while(strs[i].indexOf(prefix)!=0)                prefix = prefix.substring(0,prefix.length()-1);            i++;        }        return prefix;    }}



阅读全文
0 0
原创粉丝点击