Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
题目来源:LeetCode>替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy." 输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
二、思路分析:
- 当看见字符替换时,并不是简单使用java方法replaceAll即可,如果真是这样,那此题就失去了考察的意义,更为真实的题意,其实是想自行实现类似replaceAll内部的方法一样的思想。
- 可以使用字符数组的替换方式进行,把原字符串转换为字符数组,然后对数组每个元素进行遍历判断
- 当存在空格时,则对数据进行替换、后移操作,在此之前须创建一个新数组,对于新数组的长度,最长长度为原数组的3被,即假定原数组中全部都是空格。
- 主要的替换和后移代码:array[size] = '%',array[size + 1] = '2',array[size + 2] = '0'
三、AC 代码:
class Solution {
public String replaceSpace(String s) {
int sLength = s.length();
char[] array = new char[sLength * 3];
int size = 0;
for (int i = 0; i < sLength; i++) {
char c = s.charAt(i);
if (c == ' ') {
array[size++] = '%';
array[size++] = '2';
array[size++] = '0';
} else {
array[size++] = c;
}
}
String result = new String(array, 0, size);
return result;
}
}
时间复杂度:O(n)。
四、总结:
- 对参数的判断;
- 对是否有空格的判断;
- 每个空格替换后会使新字符串长度增加2;
- 注意字符串末尾的'\0'和越界问题;
- 从后往前插入字符,可使每个字符仅处理一次;