返回
10. URL化:用优雅的步态踩踏空格的陷阱
后端
2023-09-14 04:31:57
【LeetCode刷题记录】10.URL化:用优雅的步态踩踏空格的陷阱
引言
在互联网的汪洋大海中,URL(Uniform Resource Locator,统一资源定位符)可谓是穿针引线的指南针,指引着我们寻觅浩瀚的信息之海。然而,当URL中出现空格时,这看似无辜的字符却会给我们的旅途设置一个个小陷阱。
题目
LeetCode中的第10题“URL化”正是这样一个考察我们解决难题能力的挑战。题目要求我们编写一个函数,将字符串中的所有空格替换为“%20”。例如,输入“Mr John Smith”,输出应为“Mr%20John%20Smith”。
算法设计
解决这个问题的算法思路非常简单:
- 遍历字符串,统计空格的数量。
- 根据空格数量,计算新字符串的长度。
- 从后往前遍历字符串,逐个字符复制到新字符串中。遇到空格时,插入“%20”。
代码实现
public class URLify {
public String urlify(String s) {
int spaceCount = 0;
for (char c : s.toCharArray()) {
if (c == ' ') {
spaceCount++;
}
}
int newLength = s.length() + spaceCount * 2;
char[] newChars = new char[newLength];
int i = s.length() - 1;
int j = newLength - 1;
while (i >= 0) {
if (s.charAt(i) == ' ') {
newChars[j--] = '0';
newChars[j--] = '2';
newChars[j--] = '%';
} else {
newChars[j--] = s.charAt(i);
}
i--;
}
return new String(newChars);
}
}
复杂度分析
算法的时间复杂度为O(n),其中n为字符串的长度。空间复杂度为O(n),因为我们创建了一个新字符串来存储结果。
优化技巧
对于效率要求较高的场景,我们可以使用以下优化技巧:
- 预先计算字符串中空格的数量,避免遍历字符串两次。
- 使用StringBuilder而不是String来构建新字符串,以提高效率。
结语
通过解决LeetCode的“URL化”问题,我们不仅锻炼了我们的算法设计能力,也加深了对URL编码机制的理解。在浩瀚的互联网世界中,掌握这些看似不起眼的技巧,将使我们如履平地,从容应对各种编码难题。