您的位置:首页 > Web前端

剑指offer[二]:替换空格(java和c++版本)

2017-11-05 15:03 411 查看
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

java版本

public class Solution {
/**
* 暴力法的话就没意思
*/
public static String replaceSpace(StringBuffer str) {
/**建立两个指针,从后往前复制,首先计算好复制后的总长度
*
*/
int count=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' ')
count++;
}

int p1=str.length()-1,p2=str.length()+count*2-1;
char[]s1=new char[p2+1];
System.arraycopy(str.toString().toCharArray(), 0, s1, 0, str.length());
while(p1>=0&&p2>p1){
if(s1[p1]==' '){//遇到空格
s1[p2--]='0';
s1[p2--]='2';
s1[p2--]='%';
}
else{//遇到单词,则复制
s1[p2--]=s1[p1];
}
p1--;
//遇到空格了
}
return new String(s1);
}
}


2 . c++版本

在原本的字符指针上进行复制操作

class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==nullptr)
return;
int countEmpty=0;
for(int i=0;i<length;++i){
if(str[i]==' ')
countEmpty++;
}
if(countEmpty==0)
return;
int resultIndex=length+2*countEmpty-1;//最后的索引
while((length-1)>=0&&resultIndex>=length){
if(str[length-1]!=' '){//遇到单词,则复制
str[resultIndex--]=str[length-1];
}else{//遇到空格
str[resultIndex--]='0';
str[resultIndex--]='2';
str[resultIndex--]='%';
}
length--;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: