一、题目描述
原文链接:Offer 05. 替换空格
具体描述:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
- 0 <= s 的长度 <= 10000
二、思路分析
两种方式,第一种就是定义一个存放结果的变量(可以是String,StirngBuffer,StringBuilder),遍历字符串,遇到空格就把%20
拼接进去!
第二种方式就是双指针算法!
- 第一步遍历字符串,求出来需要添加的长度!遇到空格后,存储两个空格在StringBuilder中,
sb.append(" ");
- 第二步定义两个指针,left指向原字符串的最后一个位置,然后把原字符串拼接上sb,right指针指向拼接后的长度 - 1;
- left,right同时向左边移动,同时将left的值放到right上
c_arr[right] = c_arr[left];
- 如果left指针指向的字符是空格,则把
%20
倒序放到right指针指向的地方!就ok啦~
可能第二种方法有点晦涩难懂,简单的说就是计算出最终的长度,然后从后往前存储值!看看代码可能会更好理解一点!
三、AC代码
Stirng方式添加:
class Solution {public String replaceSpace(String s) {String result = "";char[] c_arr = s.toCharArray();for (int i = 0; i < c_arr.length; i++){if (" ".equals(c_arr[i] + "") == true){result += "%20";}else{result += c_arr[i];}}return result;}
}
StringBuffer方式添加:
class Solution {public String replaceSpace(String s) {StringBuffer result = new StringBuffer();char[] c_arr = s.toCharArray();for (int i = 0; i < c_arr.length; i++){if (" ".equals(c_arr[i] + "") == true){result.append("%20");}else{result.append(c_arr[i]);}}return result.toString();}
}
StringBuilder方式添加:
class Solution {public String replaceSpace(String s) {StringBuilder result = new StringBuilder();char[] c_arr = s.toCharArray();for (int i = 0; i < c_arr.length; i++){if (" ".equals(c_arr[i] + "") == true){result.append("%20");}else{result.append(c_arr[i]);}}return result.toString();}
}
双指针做法:
class Solution {public String replaceSpace(String s) {if (s == null || s.length() == 0) return s;// 空格数量 * 2StringBuilder sb = new StringBuilder();for (int i = 0; i < s.length(); i++){if (s.charAt(i) == ' ') sb.append(" ");}// 没有空格直接返回if (sb.length() == 0) return s;int left = s.length() - 1;// 原字符串最后一个位置s += sb.toString();int right = s.length() - 1;// 新字符串最后一个位置char[] c_arr = s.toCharArray();while(left >= 0){if (c_arr[left] == ' '){c_arr[right--] = '0';c_arr[right--] = '2';c_arr[right] = '%';}else{c_arr[right] = c_arr[left];}right--;left--;}return new String(c_arr);}
}
四、总结
- 处理字符串速度:String < StringBuffer < StringBuilder,StringBuilder最快
感谢大家的阅读,我是Alson_Code,一个喜欢把简单问题复杂化,把复杂问题简单化的程序猿! ❤