LeetCode:Longest Common Prefix

来源:互联网 发布:陕师大远程网络教育 编辑:程序博客网 时间:2024/06/03 05:49

推荐参照:Leetcode题目难度等级及面试频率总结

题目描述: Longest Common Prefix

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

思路一:

  首先,既然是公共前缀,所以第一个子串中定有,所以假设第一个字符串和第二个字符串中长度较小者为前缀,然后依次和后面的进行比较即可。

class Solution {    public String longestCommonPrefix(String[] strs) {        if (strs == null)            return null;        if (strs.length == 0)            return "";        if (strs.length == 1)            return strs[0];        String word = strs[0];        int prefixLength = word.length();        for (int i = 1; i < strs.length; i++) {            String nextWord = strs[i];            prefixLength = Math.min(prefixLength, nextWord.length());            for (int j = 0; j < prefixLength; j++)                if (word.charAt(j) != nextWord.charAt(j)) {                    prefixLength = j;                    break;                }        }        return word.substring(0, prefixLength);    }}

思路二:

  横向扫描

LCP(S1,...,Sn)=LCP(LCP(LCP(S1,S2),S3),...,Sn)
class Solution {    public String longestCommonPrefix(String[] strs) {        if (strs.length == 0 || strs == null)            return "";        String pre = strs[0];        int i = 1;        while (i < strs.length) {            while (strs[i].indexOf(pre) != 0)                pre = pre.substring(0, pre.length() - 1);// 直到找到后一个字符串包含前一个为止            i++;// 判断下一个字符串        }        return pre;    }}

思路三:

  因为如果当最短的字符串在数组最后,思路二扔需要比较S次,所以采取纵向扫描,即判断相同下标处的字符。

public String longestCommonPrefix(String[] strs) {    if (strs == null || strs.length == 0) return "";    for (int i = 0; i < strs[0].length() ; i++){        char c = strs[0].charAt(i);        for (int j = 1; j < strs.length; j ++) {            if (i == strs[j].length() || strs[j].charAt(i) != c)                return strs[0].substring(0, i);                     }    }    return strs[0];}

思路四:

  先将字符数组进行排序,这样我们就可以直接比较第一个和最后一个字符串,取他们的最长公共子串即可。

import java.util.*;class Solution {    public String longestCommonPrefix(String[] strs) {        if (strs == null)            return null;        if (strs.length == 0)            return "";        Arrays.sort(strs);        StringBuffer result = new StringBuffer();        char[] a = strs[0].toCharArray();        char[] b = strs[strs.length - 1].toCharArray();        for (int i = 0; i < a.length; i++) {            if (b.length > i && b[i] == a[i]) {                result.append(b[i]);            } else {                return result.toString();            }        }        return result.toString();    }}

—–乐于分享,共同进步
—–更多文章请看:http://blog.csdn.net/u011489043
—–Any comments greatly appreciated

0 0