字符串的调整II

字符串的调整II

题目描述

给定一个字符类型的数组chas[],chas右半区全是空字符,左半区不含有空字符。现在想将左半区的空格字符串替换成“%20”,假设chas右半区足够大,可以满足替换需要的空间,请完成替换函数。

输入描述:

输出一行,代表chas的左半区 ( 1 ≤ l e n g t h ( c h a s l e f t ) ≤ 1 0 5 ) (1 \leq length(chas_{left}) \leq 10^5 ) (1length(chasleft)105)

输出描述:

输出一行,代表替换后的字符串。

示例1
输入
a  b    c
输出
a%20%20b%20%20%20%20c
备注:

时间复杂度 O ( n ) O(n) O(n),额外空间复杂度 O ( 1 ) O(1) O(1)


题解:

从前往后遍历,统计空格数目,设为 num ,最终的字符串长度为:len + num * 2。

然后从后往前遍历,遇到非空字符,则直接复制,否则依次填充“0 2 %”。

代码
#include <stdio.h>

const int N = 3e5 + 10;

char s[N];

int main(void) {
    
    
    gets(s);
    int num = 0, i;
    int len = 0;
    for (i = 0; s[i]; ++i) {
    
    
        if (s[i] == ' ') ++num;
    }
    len = i + num * 2 - 1;
    s[len + 1] = 0;
    while (--i >= 0) {
    
    
        if (s[i] != ' ') s[len--] = s[i];
        else {
    
    
            s[len--] = '0';
            s[len--] = '2';
            s[len--] = '%';
        }
    }
    printf("%s\n", s);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/MIC10086/article/details/108811354