剑指Offer(二):替换空格(C++/Python)

题目描述:

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

解题思路:

先遍历一遍字符串,统计空格数,由此可以计算出替换空格之后的字符串的总长度,最后从字符串的后面开始复制和替换。

C++版

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == nullptr || length <= 0)
            return;
        int originalLength = strlen(str), cnt = 0;
        for(int i = 0; i < originalLength; ++ i)
            if(str[i] == ' ')
                ++ cnt;
        int newLength = originalLength + cnt * 2;
        if(newLength > length)
            return;
        int indexNew = newLength, indexOriginal = originalLength;
        for(; indexNew > indexOriginal && indexOriginal >= 0;){
            if(str[indexOriginal] == ' '){
                str[indexNew--] = '0';
                str[indexNew--] = '2';
                str[indexNew--] = '%';
            }
            else
                str[indexNew--] = str[indexOriginal];
            -- indexOriginal;
        }
    }
};

Python版

主要注意Python字符串对象是不能更改的,也即直接修改字符串中的某一位或几位字符是实现不了的,所以在替换字符串中的值的时候,需要用split,先切后合。

当然也可以直接使用Python库函数replace

#直接调用库函数
#replace(old, new, num),num表示最多替换几次
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        return s.replace(' ', '%20')

#手动实现
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        OriginalLen = len(s)
        cnt = 0
        for i in range(OriginalLen):
            if s[i] == ' ':
                cnt += 1
        s += ' ' * (cnt * 2)
        OriginalIndex = OriginalLen - 1
        CurIndex = len(s) - 1
        while OriginalIndex >= 0 and CurIndex > OriginalIndex:
            if s[OriginalIndex] == ' ':
                s = s[0:CurIndex-2] + '%20' + s[CurIndex+1:]
                CurIndex -= 3
            else:
                s = s[0:CurIndex] + s[OriginalIndex] + s[CurIndex+1:]
                CurIndex -= 1
            OriginalIndex -= 1
        return s

猜你喜欢

转载自blog.csdn.net/qq_41562704/article/details/89181096