LeetCode算法:URL化

76 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 3 天,点击查看活动详情

URL化

原题地址

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例 1:

输入:"Mr John Smith    ", 13
输出:"Mr%20John%20Smith"

示例 2:

输入:"               ", 5
输出:"%20%20%20%20%20"

提示:

  • 字符串长度在 [0, 500000] 范围内。

思路分析

方法一

  1. 题目理解了好久,完全不明白入参中的 length 是做什么用的,反复阅读后才明白,原来 length 表示字符串的真实长度,那也就是意味着在 length 以外的空格不作处理;
  2. 在读懂题目后,可以使用字符串的 substr 方法截取 length 长度的字符串,因为除此之外的不作处理;
  3. 拿到需要处理的字符串后就比较简单了,使用字符串的 replaceAll 方法,将空格都替换成 %20 即可。

方法二

  1. 按照方法一的方法获取要处理的真实的字符串;
  2. 使用 encodeURI 方法,会自动将空格转换成 %20

方法三

  1. 按照方法一的方法获取要处理的真实的字符串;
  2. 将字符串按照空格分隔后得到一个数组,然后使用 %20 进行 join 操作,可以得到需要的结果。

AC 代码

方法一

/**
 * @param {string} S
 * @param {number} length
 * @return {string}
 */
var replaceSpaces = function(S, length) {
    return S.substr(0, length).replaceAll(' ', '%20')
};

结果:

  • 执行结果: 通过
  • 执行用时:108 ms, 在所有 JavaScript 提交中击败了60.38%的用户
  • 内存消耗:63.9 MB, 在所有 JavaScript 提交中击败了86.60%的用户
  • 通过测试用例:32 / 32

方法二

/**
 * @param {string} S
 * @param {number} length
 * @return {string}
 */
var replaceSpaces = function(S, length) {
    return encodeURI(S.substr(0, length))
};

结果:

  • 执行结果: 通过
  • 执行用时:68 ms, 在所有 JavaScript 提交中击败了98.97%的用户
  • 内存消耗:49.1 MB, 在所有 JavaScript 提交中击败了97.50%的用户
  • 通过测试用例:32 / 32

方法三

/**
 * @param {string} S
 * @param {number} length
 * @return {string}
 */
var replaceSpaces = function(S, length) {
    return S.substr(0, length).split(' ').join('%20')
};

结果:

  • 执行结果: 通过
  • 执行用时:84 ms, 在所有 JavaScript 提交中击败了96.61%的用户
  • 内存消耗:57.3 MB, 在所有 JavaScript 提交中击败了92.63%的用户
  • 通过测试用例:32 / 32

END