剑指 Offer 05. 替换空格

题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
解法一:双指针
思路:先扫描原数组中的空格,计算出最终字符串的长度,再从后往前利用双指针进行复制和赋值操作

代码:
class Solution {
public String replaceSpace(String s) {
if(snull){
return null;
}
int count = 0;
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i)
' '){
count += 2;
}
}
int i = s.length()-1;
for (int j = 0; j < count; j++) {
s += ' ';
}
int j = s.length()-1;
char[] ch = s.toCharArray();
while(i>=0){
if(ch[i]==' '){
ch[j]='0';
ch[j-1] = '2';
ch[j-2] = '%';
i--;
j-=3;
} else{
ch[j] = ch[i];
i--;
j--;
}
}
return String.valueOf(ch);
}
}
分析:此方法不需要申请额外空间,在原元素上进行操作,且时间复杂度为O(n)

解法二:利用StringBuilder
思路:遇到非空格直接加入sb,遇到空格则加入“%20”
代码:
public static String replaceSpace(String s) {
if(s==null){
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i)!=' '){
sb.append(s.charAt(i));
} else{
sb.append("%20");
}
}
return sb.toString();
}
分析:额外创建了sb的空间O(n),时间复杂度为O(n)

解法三:暴力法
解法四:直接利用String.replaceAll(" ","%20");

posted @ 2021-07-14 11:29  for_ward  阅读(30)  评论(0)    收藏  举报