面试之路(20)-字符串中空格替换一类问题详解

题目描述

实现一个函数,把字符串中的空格替换为%20,例如“we are happy”,转换为“we%20are%20happy”

思路分析:

  • 遍历的方法,时间复杂度是n×n
  • 采用双指针,从后往前复制数组,遍历统计空格,每增加一个空格,数组长度增加2,设置联两个指针p1,p2,p1指向旧数组的末尾,p2指向新数组的末尾,根据末尾是否是空格分类复制

代码:

public void replaceBlank(char string[],int length){
        if(string == null || length <= 0){
            return;
        }
        //保存字符串的实际长度
        int originLength = 0;
        int numberOfBlank = 0;
        int i  = 0;
        while(string[i] != '\0'){
            ++originLength;
            if(string[i] == ' '){
                ++numberOfBlank;
            }
            i++;
        }
        int newLength = originLength + numberOfBlank*2;
        //在剑指offer中,此处是newLength > length,我感觉是它错了,欢迎指正
        if(newLength + 1 > length){
            return;
        }
        int indexOld = originLength;
        int indexNew = newLength;
        //剑指offer中这里是>,我是>=
        while(indexOld > 0 || indexNew >= indexOld){
            if(string[indexOld] == ' '){
                string[indexNew--] = '0';
                string[indexNew--] = '2';
                string[indexNew--] = '%';
            }else{
                string[indexNew--] = string[indexOld];
            }
            indexOld--;
        }
    }

测试用例

  • 输入空格在最前,最后,中间,连续
  • 不含空格
  • 字符串是null,内容是空,只保含空格

相似问题:

两个已经排序数组a1,a2,假设a1的空间足够大,a2插入a1

总结:

合并或者插入数组或者字符串,从后往前,采用双指针
本文是看完剑指offer整理写成,有部分不同,有待确认。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值