第七周_A-leetcode字符串-最长公共前缀

56 阅读1分钟
package com.practice.字符串;

/**
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * 如果不存在公共前缀,返回空字符串 ""。
 */

/**
 * 输入:strs = ["flower","flow","flight"]
 * 输出:"fl"
 */
public class 最长公共前缀 {
    public static void main(String[] args) {
        String[] strs = new String[]{"ab", "a"};

        dealPrefix(strs);
    }

    /**
    * 自己实现
	*/
    public static String dealPrefix(String[] strs) {
        if (strs.length == 0) {
            return "";
        }

        boolean isGo = true;
        String str1 = strs[0];
        int i = 0;
        for (; i < str1.length(); i++) {  //取数组第一个数作为标准 ,然后一个字一个字判断
            char ch1 = str1.charAt(i);  //
            for (int j = 1; j < strs.length; j++) { //循环数组余下的字段,然后取每个字段里面的字对比
                if (i >= strs[j].length()) {   //长度不够,直接失败
                    isGo = false;
                    break;
                }
                char tmp = strs[j].charAt(i);
                if (ch1 != tmp) {     //字不一样,直接失败
                    isGo = false;
                    break;
                }
            }
            if (!isGo) { //不一样了,跳出循环
                break;
            }
        }
        if (!isGo) {
            str1 = str1.substring(0, i);
            System.out.println(str1);
        }
        return str1;
    }

    /**
     * leetcode 参考答案:代码优雅些
     */
    public static String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) {
            return "";
        }
        String ans = strs[0];
        for (int i = 1; i < strs.length; i++) {
            int j = 0;
            for (; j < ans.length() && j < strs[i].length(); j++) {
                if (ans.charAt(j) != strs[i].charAt(j)) {
                    break;
                }
            }
            ans = ans.substring(0, j);
            if (ans.equals("")) {
                return ans;
            }
        }
        return ans;
    }

}

自己实现了一版,代码不够简洁优雅。能通过 leetCode 提交。

想法思路都在代码注释了:主要是取第一个字符串作为标准,然后挨个取其他字符串比较