leetcode-14-求字符串数组最长公共前缀

String的compareTo方法是按照字典顺序比较的。而Arrays.sort方法对对象数组按照自然顺序进行排序。
public static void sort(Object[] a) 该方法要求数组元素实现了Comparable接口,所以如果是对字符串数组进行排序,是按照字典顺序进行排序的。

public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) return "";
        StringBuffer res = new StringBuffer();
        Arrays.sort(strs);
        String s1 = strs[0], s2 = strs[strs.length - 1];
        for (int i = 0; i < s1.length(); i++) {
            if (s2.length() > i && s2.charAt(i) == s1.charAt(i))
                res.append(s1.charAt(i));
            else return res.toString();
        }
        return res.toString();
    }

先对数组进行排序,如果存在公共前缀,第一个元素的前缀一定也是最后一个元素的前缀,如果不是,则没有公共前缀。如果是,就不断增加字符,直到最大的公共前缀。
注意这里strs中如果有空字符串,那么排序后这个空字符串位于第一个元素,结果返回一个空字符串。因为空字符串没有公共前缀。
例如对String[] str = " and then you can simply compare the first and last elements in the sorted array".split(" ");进行排序,结果为

     //这是个空字符串
and
and
array
can
compare
elements
first
in
last
simply
sorted
the
the
then
you

分析左侧第一个字符,如果是公共前缀,那么第一个和最后一个的第一个应该一样。如果不是,那就没有公共前缀,返回一个空字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值