剑指 Offer 02. 替换空格
题目链接
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
(1)直接利用java String
中的replace
函数即可。
String replace(char oldChar, char newChar)
将字符串的oldchar替换为newchar并返回。
(2)遍历字符串,如果不是空格就把遍历的字符添加到StringBuffer对象中,如果是空格就添加“%20”到StringBuffer对象中,最后调用StringBuffer.toString()即可。
(3)最笨的也就是最麻烦的麻烦,打扰了一开始我就用的这种方法,把一个字符串分为3个部分,并分别统计各个部分的空格数(字符串首部连续的空格数、字符串末尾开始的连续空格数,字符串内部的空格数),在统计字符串内部空格数的同时,也把单词存储在String数组中,例如“ We are student ”,字符串首部连续的空格数 = 2; 字符串末尾开始的连续空格数=2;字符串内部的空格数=2,且把建立了一个String数组,其内容为s[0]="we",s[1]="are",s[2]="student",最后把三部分组装起来即可。
AC代码
解法一
public String replaceSpace(String s) {
return s.replace(" ", "%20");
}
解法二
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == ' '){
sb.append("%20");
}else{
sb.append(str.charAt(i));
}
}
return sb.toString();
}
}
解法三
class Solution {
public String replaceSpace(String s) {
String ss = "%20";
String[] sp = new String[10000];
if(s.length() == 0) return s;
//利用index统计字符串开始的连续空格数
int index = 0;
while(index < s.length()){
if(s.charAt(index) == ' ') index++;
else break;
}
//利用num统计字符串从末尾开始的连续空格数
int p = s.length()-1;
int num = 0;
while(p>=0){
if(s.charAt(p)==' '){
num++;
p--;
}
else break;
}
String ans = "";
if(num == index && index== s.length()){
for(int i = 0; i < index; i++) ans += ss;
}
else{
int start = index;
//利用midsize统计字符串除去开头和结尾的空格数
int midsize = 0;
for(int i = index; i <= p; i++){
if(s.charAt(i) == ' '){
String temp = s.substring(start,i);
start=i+1;
sp[midsize++] = temp;
}
}
sp[midsize++] = s.substring(start,p+1);
//最后合并三部分
for(int i = 0; i < index; i++) ans += ss;
for(int i = 0; i < midsize-1; i++){
ans += sp[i];
ans += ss;
}
ans += sp[midsize-1];
for(int i = 0; i < num; i++) ans += ss;
}
return ans;
}
}