题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
python版本:
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
return s.replace(" ","%20")
java版本:
在原有的字符串中修改:
思想:从后往前添加,每个字符只需移动一次,遇到空格,替换%20,效率高,移动次数少
先计算出原有的字符串空格的个数,扩展原有字符串长度,新长度=原有长度+空格个数*2,往后移动字符,遇到空格就替换
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null)
{
return null;
}
int spaceCount=0;
for (int i =0;i<str.length();i++)
{
//if str[i]=" ";
if(str.charAt(i)==' '){
spaceCount+=1;
}
}
int indexold=str.length()-1;//原来下标
int newLength=str.length()+spaceCount*2;//新长度
int indexNew=newLength-1;//新下标
str.setLength(newLength);
//开始移动
for(;indexold>=0&&indexold<newLength;indexold--)
{
if(str.charAt(indexold)==' ')
{
str.setCharAt(indexNew--,'0');
str.setCharAt(indexNew--,'2');
str.setCharAt(indexNew--,'%');
}
else{
str.setCharAt(indexNew--,str.charAt(indexold));
}
}
return str.toString();
}
}
开辟新的空间,从前往后替换:
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null)
{
return null;
}
StringBuilder newStr = new StringBuilder();
//开始移动
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)==' ')
{
newStr.append('%');
newStr.append('2');
newStr.append('0');
}
else{
newStr.append(str.charAt(i));
}
}
return newStr.toString();
}
}
C/C++实现:
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==NULL || length<=0)
return;
int old_strlength=0;
int blankNum=0;
int i=0;
while(str[i]!='\0'){
++old_strlength;
if(str[i]==' '){
++blankNum;
}
++i;
}
int newstrLength=old_strlength+blankNum*2;
if(newstrLength>length){
return;
}
int indexoldstr=old_strlength;
int indexNewstr=newstrLength;
while(indexoldstr>=0 && indexNewstr>indexoldstr){
if (str[indexoldstr]==' '){
str[indexNewstr--]='0';
str[indexNewstr--]='2';
str[indexNewstr--]='%';
}
else{
str[indexNewstr--]=str[indexoldstr];
}
--indexoldstr;
}
}
};
C#实现:
class Solution
{
public string replaceSpace(string str)
{
// write code here
return str.Replace(" ","%20");
}
}