• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

剑指Offer-2.替换空格(C++/Java)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

题目:

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

分析:

题意明确,就是将一个字符串中的每个空格替换成“%20”,可以新建一个空字符串,遍历原字符串,遇到空格就添加“%20”,否则就将字符添加进新串中。

不过这种方法需要额外的空间,我们可以在原字符串上进行操作。

如果从头开始遍历字符串,遇到空格将其替换成为“%20”,需要将后面的字符进行后移操作,时间复杂度很高。

所以我们可以先遍历一遍原字符串,求出有多少个空格,这样我们就能得到替换后的字符串的大小,也就是原字符串的长度加上2*空格数,设置好两个指针,分别指向原字符串末尾和扩展好长度的字符串的末尾,如果,然后从后遍历字符串,遇到非空格字符就原字符串的指针指向的字符赋值给新的指针指的位置,如果遇到空格就依次添加'0','2','%'。

程序:

C++

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int spaceNum = 0;
        for(int i = 0; i < length; ++i){
            if(str[i] == ' ')
                spaceNum++;
        }
        int newLength = length + spaceNum*2;
        int oldIndex = length-1;
        int newIndex = newLength-1;
        while(oldIndex >= 0 && oldIndex < newIndex){
            if(str[oldIndex] == ' '){
                str[newIndex--] = '0';
                str[newIndex--] = '2';
                str[newIndex--] = '%';
                oldIndex--;
            }
            else{
                str[newIndex--] = str[oldIndex--];
            }
        }
    }
};

Java

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int oldIndex = str.length()-1;
        int spaceNum = 0;
        for(int i = 0; i < str.length(); ++i) {
            if(str.charAt(i) == ' ')
                spaceNum++;
        }
        str.setLength(str.length() + 2*spaceNum);
        int newIndex = str.length()-1;
        while(oldIndex >= 0 && oldIndex < newIndex) {
            char temp = str.charAt(oldIndex);
            if(temp == ' ') {
                str.setCharAt(newIndex--, '0');
                str.setCharAt(newIndex--, '2');
                str.setCharAt(newIndex--, '%');
                oldIndex--;
            }
            else {
                str.setCharAt(newIndex, temp);
                oldIndex--;
                newIndex--;
            }
        }
        return str.toString();
    }
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#取网卡Mac地址发布时间:2022-07-13
下一篇:
c#中的格式输出发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap