LCR 122 路径加密 - 优化题解对比
问题描述
给定一个路径字符串 path,其中使用 “.” 作为分隔符。现在需要对路径进行加密,加密方法是将路径中的分隔符替换为空格 " ",请返回加密后的字符串。
示例
-
输入:path = “a.aef.qerf.bb”
-
输出:“a aef qerf bb”
限制
- 0 <= path.length <= 10000
题解对比
题解一
class Solution {
public String pathEncryption(String path) {
String newPath = "";
for (int i = 0; i < path.length(); i++){
char ch = path.charAt(i);
if (ch == '.'){
newPath += " ";
} else {
newPath += ch;
}
}
return newPath;
}
}
- 执行用时: 5ms
- 击败比例: 3.62% 使用 Java 的用户
题解二
class Solution {
public String pathEncryption(String path) {
StringBuilder newPath = new StringBuilder();
for (int i = 0; i < path.length(); i++){
char ch = path.charAt(i);
if (ch == '.'){
newPath.append(" ");
} else {
newPath.append(ch);
}
}
return newPath.toString();
}
}
- 执行用时: 0ms
- 击败比例: 100.00% 使用 Java 的用户
优化对比
两个题解的核心思想是一致的,都是遍历输入路径字符串,遇到 “.” 就替换成空格,其余字符保持不变。然而,题解二采用了 StringBuilder 来构建新的路径字符串,相较于题解一,它的执行效率更高。
-
优势一:StringBuilder 的高效性
在 Java 中,字符串是不可变的,每次执行字符串连接操作都会生成一个新的字符串对象。这导致了题解一中在每次循环中都创建了新的字符串,而题解二使用 StringBuilder 则避免了这种开销。StringBuilder 是可变的,可以高效地进行字符串拼接,不会每次都生成新的字符串对象,因此性能更好。 -
优势二:内存占用
由于字符串的不可变性,每次连接字符串都会产生新的字符串对象,而这些对象需要在内存中占用额外的空间。使用 StringBuilder 的方式可以减少内存占用,因为它只在需要时扩展其内部缓冲区,而不是创建新的对象。
总结
虽然两个题解的逻辑相同,但由于题解二采用了 StringBuilder,在性能和内存占用方面都更为优越。因此,推荐使用题解二的实现方式,特别是在处理大规模输入时,其优势将更为明显。