zoukankan      html  css  js  c++  java
  • 剑指Offer-2.替换空格(C++/Java)

    题目:

    请实现一个函数,将一个字符串中的每个空格替换成“%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();
        }
    }
  • 相关阅读:
    sqlserver 2000备份文件还原到sqlserver 2005(2008)
    .dll文件有什么用?
    汇编片段
    以POST方式请求数据的Ajax实现方式
    有两个数据据服务器上有两个一样结构的数据库,现想将一服务器上的一数据库里的一个表的一部份记录插入到另一服务器上的一数据库的一表中.
    揭开ASP.NET中Cookie编程的奥秘(2)
    商城网店初步完成了,很多不足
    ajax上传(xmlhttp上传文件突破大小限制)
    查询优化
    金山词霸”屏幕取词技术揭密(讨论稿)
  • 原文地址:https://www.cnblogs.com/silentteller/p/11802696.html
Copyright © 2011-2022 走看看