返回

10. URL化:用优雅的步态踩踏空格的陷阱

后端

【LeetCode刷题记录】10.URL化:用优雅的步态踩踏空格的陷阱

引言

在互联网的汪洋大海中,URL(Uniform Resource Locator,统一资源定位符)可谓是穿针引线的指南针,指引着我们寻觅浩瀚的信息之海。然而,当URL中出现空格时,这看似无辜的字符却会给我们的旅途设置一个个小陷阱。

题目

LeetCode中的第10题“URL化”正是这样一个考察我们解决难题能力的挑战。题目要求我们编写一个函数,将字符串中的所有空格替换为“%20”。例如,输入“Mr John Smith”,输出应为“Mr%20John%20Smith”。

算法设计

解决这个问题的算法思路非常简单:

  1. 遍历字符串,统计空格的数量。
  2. 根据空格数量,计算新字符串的长度。
  3. 从后往前遍历字符串,逐个字符复制到新字符串中。遇到空格时,插入“%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),因为我们创建了一个新字符串来存储结果。

优化技巧

对于效率要求较高的场景,我们可以使用以下优化技巧:

  1. 预先计算字符串中空格的数量,避免遍历字符串两次。
  2. 使用StringBuilder而不是String来构建新字符串,以提高效率。

结语

通过解决LeetCode的“URL化”问题,我们不仅锻炼了我们的算法设计能力,也加深了对URL编码机制的理解。在浩瀚的互联网世界中,掌握这些看似不起眼的技巧,将使我们如履平地,从容应对各种编码难题。