Java 最长公共前缀算法优化:时间复杂度和空间复杂度提升

本文将介绍如何优化 Java 代码以求解最长公共前缀问题,通过使用 StringBuilder 类代替 String 类、使用 setLength 方法截断字符串、使用 while 循环等技巧,提高了代码的时间复杂度和空间复杂度。

原始代码:

public class LongestCommonPrefix {
    public String Solution(String[] str){
        if(str.length<=1){
            return '数组的长度为0或1,不存在公共前缀';
        }
        String firstElement = str[0];
        for (int i = 1; i < str.length; i++) {
            int j=0;
            for (;j<firstElement.length() && j < str[i].length(); j++) {
                if(firstElement.charAt(j) != str[i].charAt(j)){
                    break;
                }
            }
            firstElement = firstElement.substring(0,j);
            if(firstElement.equals('')){
                return '此数组不存在公共前缀!';
            }
        }
        return firstElement;
    }

    public static void main(String[] args) {
        String[]str = {'fla','l'};
        System.out.println(new LongestCommonPrefix().Solution(str));
    }
}

优化后的代码:

public class LongestCommonPrefix {
    public String Solution(String[] str) {
        if (str.length <= 1) {
            return '数组的长度为0或1,不存在公共前缀';
        }
        StringBuilder prefix = new StringBuilder(str[0]);
        for (int i = 1; i < str.length; i++) {
            int j = 0;
            while (j < prefix.length() && j < str[i].length() && prefix.charAt(j) == str[i].charAt(j)) {
                j++;
            }
            prefix.setLength(j);
            if (prefix.length() == 0) {
                return '此数组不存在公共前缀!';
            }
        }
        return prefix.toString();
    }

    public static void main(String[] args) {
        String[] str = {'fla', 'l'};
        System.out.println(new LongestCommonPrefix().Solution(str));
    }
}

优化说明:

  1. 使用 StringBuilder 类代替 String 类,减少字符串拼接的开销。
  2. 使用 StringBuildersetLength 方法直接截断 prefix 字符串,而不是使用 substring 方法创建新的字符串对象,减少内存占用。
  3. 使用 while 循环代替 for 循环,当不满足条件时立即退出循环,减少无效比较的次数。
  4. firstElement 改为 prefix,更加符合语义。
  5. 删除了不必要的异常处理部分,因为代码中没有可能抛出异常的地方。

总结:

通过以上优化,代码的时间复杂度和空间复杂度都得到了提升,代码执行效率更高,内存占用更少。

Java 最长公共前缀算法优化:时间复杂度和空间复杂度提升

原文地址: https://www.cveoy.top/t/topic/o4Op 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录