剑指offer[二]:替换空格(java和c++版本)

来源:互联网 发布:什么软件可以做一寸照 编辑:程序博客网 时间:2024/06/06 13:36

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

  1. java版本
public class Solution {/**     * 暴力法的话就没意思     */     public static String replaceSpace(StringBuffer str) {        /**建立两个指针,从后往前复制,首先计算好复制后的总长度         *          */         int count=0;         for(int i=0;i<str.length();i++){             if(str.charAt(i)==' ')                 count++;         }         int p1=str.length()-1,p2=str.length()+count*2-1;         char[]s1=new char[p2+1];          System.arraycopy(str.toString().toCharArray(), 0, s1, 0, str.length());         while(p1>=0&&p2>p1){             if(s1[p1]==' '){//遇到空格                 s1[p2--]='0';                 s1[p2--]='2';                 s1[p2--]='%';             }             else{//遇到单词,则复制                 s1[p2--]=s1[p1];             }             p1--;             //遇到空格了                  }         return new String(s1);        }}

2 . c++版本
在原本的字符指针上进行复制操作

class Solution {public:    void replaceSpace(char *str,int length) {        if(str==nullptr)            return;        int countEmpty=0;        for(int i=0;i<length;++i){            if(str[i]==' ')                countEmpty++;        }        if(countEmpty==0)            return;        int resultIndex=length+2*countEmpty-1;//最后的索引         while((length-1)>=0&&resultIndex>=length){             if(str[length-1]!=' '){//遇到单词,则复制                 str[resultIndex--]=str[length-1];             }else{//遇到空格                 str[resultIndex--]='0';                 str[resultIndex--]='2';                 str[resultIndex--]='%';             }             length--;            }      }};