剑指offer第四天之替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
java字符数组char[]和字符串String之间的转换
使用String.valueOf()将字符数组转换成字符串
void (){
char[] s={'A','G','C','T'};
String st=String.valueOf(s);
System.out.println("This is : "+st);
}
使用.toCharArray()将字符串转换成字符数组
String st="AGCT";
char[] s=st.toCharArray();
for (int i=0;i<st.length();i++){
System.out.println("This s[i]"+i+s[i]);
}
java:
public static String replaceSpace(StringBuffer str) {
return str.toString().replace(" ", "%20");
}
java最优解法:
public static String replaceSpace(StringBuffer str) {
// return str.toString().replace(" ", "%20");
if(str==null)
return "";
// 字符串总长
int oldlen=str.length();
// 计算空格数量
int kong=0;
for(int i=0;i<oldlen;i++)
{
if(str.charAt(i)==' ')
{
kong++;
}
}
// 新字符串长度
int newlength = oldlen+kong*2;
// 创建字符数组
char[] array = new char[newlength];
int oldIndex = oldlen - 1;
int newIndex = newlength - 1;
// 从后往前挪动
while(oldIndex>=0 && oldlen<=newlength)
{
char c=str.charAt(oldIndex);
if (c==' ')
{
array[newIndex--]='0';
array[newIndex--]='2';
array[newIndex--]='%';
}else{
array[newIndex--]=c;
}
oldIndex--;
}
return String.valueOf(array);
}
java:
public static String replaceSpace(StringBuffer str) {
StringBuffer s = new StringBuffer("");
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)==' ')
{
s.append("%20");
}
else
{
s.append(str.charAt(i));
}
}
return s.toString();
}
python:
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
lists=[]
for i in range(len(s)):
if s[i] == ' ':
lists.append("%20")
else:
lists.append(s[i])
return "".join(lists)
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
lists = []
for i in range(len(s)-1,-1,-1):
if s[i] == ' ':
lists.insert(0,"%20")
else:
lists.insert(0,s[i])
return "".join(lists)
class Solution:
# s 源字符串
def replaceSpace(self, s):
return "%20".join(s.split(" "))
总结的来说有三种方法,从后往前(最优)最优的是思想,从前往后(中等),取巧的方法需要知道。
c++:
void replaceSpace(char *str,int length) {
//遍历一边字符串找出空格的数量
if(str==NULL||length<0)
return ;
int i=0;
int oldnumber=0;//记录以前的长度
int replacenumber=0;//记录空格的数量
while(str[i]!='\0')
{
oldnumber++;
if(str[i]==' ')
{
replacenumber++;
}
i++;
}
int newlength=oldnumber+replacenumber*2;//插入后的长度
if(newlength>length)//如果计算后的长度大于总长度就无法插入
return ;
int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里
int pNewlength=newlength;
while(pOldlength>=0&&pNewlength>pOldlength)//放字符
{
if(str[pOldlength]==' ') //碰到空格就替换
{
str[pNewlength--]='0';
str[pNewlength--]='2';
str[pNewlength--]='%';
}
else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
{
str[pNewlength--]=str[pOldlength];
}
pOldlength--; //不管是if还是elsr都要把pOldlength前移
}
}