思路讲解与算法实现 LeetCode - URL化
思路讲解与算法实现 LeetCode - URL化
每天一道公司算法真题,讲解解题思路与各种算法实现;欢迎大家点评或者说出你的解题想法,或评论想让我讲解哪道题!
目录
题目
解法一
解法二
上下篇
题目
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例1:
输入: "Mr John Smith ", 13
输出:“Mr%20John%20Smith”
示例2:
输入:" ", 5
输出:"%20%20%20%20%20"
说明
字符串长度在 [0, 500000] 范围内。
解法一
如果借助Java API来实现,那就太简单,几行代码搞定,因为题目说假设字符串尾部有足够的空间,那表明尾部可能有空字符,所以首先我们使用substring()函数截取实际的字符串,然后再通过replace函数将空格替换为%20即可。
package com.nobody;
/**
* @Description URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
* @Author Mr.nobody
* @Date 2021/4/22
* @Version 1.0
*/
public class ReplaceSpaces {
public String replaceSpaces(String S, int length) {
return S.substring(0, length).replace(" ", "%20");
}
public static void main(String[] args) {
ReplaceSpaces replaceSpaces = new ReplaceSpaces();
String s = "chen pi de Java Lib ";
int length = s.trim().length();
System.out.println(replaceSpaces.replaceSpaces(s, length));
}
}
// 输出
chen%20pi%20de%20Java%20Lib
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
解法二
但是题目如果用Java实现的话,使用字符数组实现,而且也假设字符串尾部有足够的空间存放新增的字符,那我们可以借助原有足够的字符数组,从最尾部空间的位置往前存放每一个字符,如果是空格字符则存放%20这三个字符,否则存放原字符。最后截取尾部有效的字符数组即可。
package com.nobody;
/**
* @Description URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
* @Author Mr.nobody
* @Date 2021/4/22
* @Version 1.0
*/
public class ReplaceSpaces {
public String replaceSpaces(String S, int length) {
// 将字符串转换为字符数组
char[] chars = S.toCharArray();
// 填充游标,从字符数组的末尾开始往前填充
int fillIndex = chars.length - 1;
for (int i = length - 1; i >= 0; i--) {
if (' ' == chars[i]) {
chars[fillIndex--] = '0';
chars[fillIndex--] = '2';
chars[fillIndex--] = '%';
} else {
chars[fillIndex--] = chars[i];
}
}
// 截取最后有效的字符数组返回
return new String(chars, fillIndex + 1, chars.length - 1 - fillIndex);
}
public static void main(String[] args) {
ReplaceSpaces replaceSpaces = new ReplaceSpaces();
String s = "chen pi de Java Lib ";
int length = s.trim().length();
System.out.println(replaceSpaces.replaceSpaces(s, length));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
————————————————
版权声明:本文为CSDN博主「陈皮的JavaLib」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chenlixiao007/article/details/116035073