剑指offer第四天之替换空格

剑指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前移
         
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值