题目:请实现一个函数,将一个字符串中的空格替换成“ ”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We Are Happy。
python版本:
# -*- coding:utf-8 -*- class Solution: # s 源字符串 def replaceSpace(self, s): # write code here return s.replace(" "," ") java版本:
在原有的字符串中修改: 思想:从后往前添加,每个字符只需移动一次,遇到空格,替换 ,效率高,移动次数少 先计算出原有的字符串空格的个数,扩展原有字符串长度,新长度=原有长度+空格个数*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(" "," "); } }