替换空格经典例题

题目:将字符串中的空格替换成“%20”;要求时间复杂度为O(n);

分析:常规暴暴力法可以解决这个问题,思路为定义两个下标,一个首下标p,一个尾下标q;首下标p往后跑,遇到空格,尾下标q往前跑,直至与首下标p相等,依次把 把赋给下第两个单元(arr[q+2]=arr[q2],2为空格及“%20”长度的差),此时空出来三位,就依次赋值“2,0,%”,最后q回到现有字符串的最后位置,循序上步骤。这样虽然可以解决问题但是时间复杂度为O(n^2),可不太行。

高效率的方法为:先遍历一遍整个字符串,用计数器保存空格的位数count,下标p保存原字符串尾位置,下标q保存的是扩展的尾下标(n=len+count*2);p依次往前跑,不是空格就把p代表的值赋值q位置,q往前跑一步,p也往前跑一步;p是空格就q往前跑两位,依次赋值赋值“%,0,2”;

 

char* Change(char str[],int len)
{
    int count = 0; int i = 0;
    while (str[i]!= '\0')
    {
        if (str[i] == ' ')count++;
        i++;
    }
    int m = len, n = len + count * 2;
    while (m>=0&&m<n)
    {
        if (str[m] != ' ')
        {
            str[n] = str[m];
            n--;
        }
        if (str[m] == ' ')
        {
            str[n--] = '0';
            str[n--] = '2';
            str[n--] = '%';
        
        }
        m--;
    }
    return str;
}
 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值