题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
在开始正题之前,先说个小故事。作为刚开始刷题的我,在刷这道题时,在想java如何将其一步步移位。然而在旁边无所事事的女朋友看了过来,作为只用过简单python代码能力相对较弱的人,我就说这题给你一个小时都做不出来,于是她很不服气地就做了起来,然后。。。就没有然后了,因为他比我先做出来了!!!
她的方法
def main():
s = 'we are happy'
print(s.replace(" ","%20"))
main()
好的,没看错,就是这么简单地就出来了!!!
我瞬间石化~~~哭喊着:这是耍赖!!!
然而.......
Java简单实现
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(" ", "%20");
}
}
是滴,没看错,Java最简单的代码也是这样!
当然了,方法还是很多的,比如下面这个新建一个字符串Buffer,然后将原有的字符串变成字符一个个加进去,遇到空格,加“%20”
public class Solution {
public String replaceSpace(StringBuffer str) {
String s = str.toString();
char [] strChar = s.toCharArray();
StringBuffer out = new StringBuffer();
for(int i=0; i<strChar.length; i++){
if(strChar[i]==' ')
out.append("%20");
else
out.append(strChar[i]);
}
return out.toString();
}
}
下面方法与第一种方法类似
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null)
{
return null;
}
for(int i=0;i<str.length();i++)
{
char c = str.charAt(i);
if(c==' ')
{
str.replace(i,i+1,"%20");
}
}
String s = str.toString();
return s;
}
}
好吧,我的思想更适合C++的,用Java琢磨半天是我的过错。。。
附上C++实现一份
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==NULL)
return ;
int CountOfBlanks=0;
int Originallength=0;
for(int i=0;str[i]!='\0';i++)
{
Originallength++;
if(str[i]==' ')
++CountOfBlanks;
}
int len =Originallength+2*CountOfBlanks;
if(len+1>length)
return ;
char*pStr1=str+Originallength;//复制结束符‘\0’
char*pStr2=str+len;
while(pStr1<pStr2)
{
if(*pStr1==' ')
{
*pStr2--='0';
*pStr2--='2';
*pStr2--='%';
}
else
{
*pStr2--=*pStr1;
}
--pStr1;
}
}
};
总结与展望
思维不能局限,僵化,最重要的一点,不要得罪老婆,不然后果很难堪~