leetcode 14. Longest Common Prefix

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


每次比较保存可能的最长相同前缀

public class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length==0) return "";
        StringBuilder sb = new StringBuilder(strs[0]);
        
        for(int i=1; i<strs.length; i++){
            StringBuilder pre = sb;
            sb = new StringBuilder();
            for(int j=0; j<Math.min(strs[i].length(), pre.length()); j++){
                if(strs[i].charAt(j) != pre.charAt(j)) break;
                sb.append(pre.charAt(j));
            }
        }
        return sb.toString();
    }
}

和上面做法类似但是更简略的方法,用indexOf实现匹配

public String longestCommonPrefix(String[] strs) {
    if(strs == null || strs.length == 0)    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;
}

更巧妙的方法是对数组排序然后直接比较前后两个字符串

    public String longestCommonPrefix(String[] strs) {
        StringBuilder result = new StringBuilder();
        
        if (strs!= null && strs.length > 0){
        
            Arrays.sort(strs);
            
            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();
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值