剑指 Offer 05. 替换空格

"本文介绍了在C++、Java和Python中如何将字符串中的空格替换为"%20"的方法。涉及到字符串长度计算、字符遍历以及不同语言处理字符串的特性。对于C++,利用了string的可变性直接修改;Java中使用StringBuilder进行拼接;Python则通过内置函数或新建列表实现。"
摘要由CSDN通过智能技术生成

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

// c++
#include <string>
using namespace std;

class Solution
{
    public:
    string replaceSpace(string s)
    {
        int numOfBlank = 0;
        for (auto c : s)
        {
            if (c == ' ')
            {
                numOfBlank++;
            }
        }

        int len = s.size();
        s.resize(len + numOfBlank * 2);

        int i = len - 1;
        int j = s.size() - 1;
        while(i != j){
            if(s[i] != ' '){
                s[j--] = s[i--];
            }else{
                i--;
                s[j--] = '0';
                s[j--] = '2';
                s[j--] = '%';
            }
        }

        return s;
    }
};

注意点:

  • c++中string为可变类型,可以直接在原来的基础上扩展修改字符串。java和python只能新建一个字符串进行拷贝。
  • for(auto c : s)可以遍历s中的元素,c的类型如果无法确定可以用auto代替。
  • s[i++] = 1,这种写法适合向数组中添加元素,添完后i自动后移。
// java
class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for (char c : s.toCharArray()) {
            if (c != ' ') {
                res.append(c);
            } else {
                res.append("%20");
            }
        }
        return res.toString();
    }
}

注意点:

  • 要对java中的字符串进行修改,推荐使用StringBuilder,它的append("hello"), insert(8, "hello"), delete(5, 8)方法很好用。
  • StringBuilder对象用toString方法转换为String。
  • String对象要用toCharArray方法转换为字符型数组才能进行遍历。
# python
class Solution:
    def replaceSpace(self, s: str) -> str:
        # return s.replace(' ', '%20') 
        
        # res = ''
        # for c in s:
        #     if c != ' ':
        #         res += c
        #     else:
        #         res += '%20'
        # return res
        
        res = []
        for c in s:
            if c != ' ': res.append(c)
            else: res.append('%20')
        return ''.join(res)

注意点:

  • 可以用字符串内置处理函数replace。
  • 也可以新建一个字符串或者列表(最后将列表转换成字符串)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值