Java 最长公共前缀算法优化:时间复杂度和空间复杂度提升
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));
}
}
优化说明:
- 使用
StringBuilder类代替String类,减少字符串拼接的开销。 - 使用
StringBuilder的setLength方法直接截断prefix字符串,而不是使用substring方法创建新的字符串对象,减少内存占用。 - 使用
while循环代替for循环,当不满足条件时立即退出循环,减少无效比较的次数。 - 将
firstElement改为prefix,更加符合语义。 - 删除了不必要的异常处理部分,因为代码中没有可能抛出异常的地方。
总结:
通过以上优化,代码的时间复杂度和空间复杂度都得到了提升,代码执行效率更高,内存占用更少。
原文地址: https://www.cveoy.top/t/topic/o4Op 著作权归作者所有。请勿转载和采集!