剑指 Offer——2. 替换空格

题目描述

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

思路与实现

解法:
先遍历一遍字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串长度。

每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2*空格的数目。

我们从字符串的后面开始复制和替换,首先准备两个指针,P1和P2,P1指向原始字符串的末尾,P2指向替换之后字符串的末尾。

接下来,向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int beforeLength = str.length();
        int spaceNum = 0;
        for(int i = 0; i < beforeLength; i ++){
            if(str.charAt(i) == ' '){
                spaceNum ++;
            }
        }
        int afterLength = beforeLength + 2*spaceNum;
        str.setLength(afterLength);
        int p1 = beforeLength - 1;
        int p2 = afterLength - 1;
        while(p1 != p2){
            if(str.charAt(p1) == ' '){
                str.setCharAt(p2 --, '0');
                str.setCharAt(p2 --, '2');
                str.setCharAt(p2 --, '%');
            }else{
                str.setCharAt(p2 --, str.charAt(p1));
            }
            p1 --;
        }
        return str.toString();
    }
}

原文地址:https://www.cnblogs.com/xiehang/p/11273604.html

时间: 2024-10-08 21:35:58

剑指 Offer——2. 替换空格的相关文章

剑指offer 《替换空格》

本题来自<剑指offer> 替换空格 题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 方案一:空间优先,在原数组的基础上进行替换,没替换一次就将后面的字符串向后挪两个位置 step1:查询空格的个数,在此基础上申请空格数两倍的位置 step2:从后面向前遍历,如果遇到空格就加入‘’02%‘’,否则就继续挪动非空格字符,直到空格遍历完.代码采用了c++编程 方案二:可申

《剑指offer》替换空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. Solution: #include <iostream> using namespace std; void replaceBlank(char str[],int length) { if(str==NULL||length<0) return ; int originalLength=0; int numberOfB

剑指OFFER之替换空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例.对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20Happy Code: #include <stdio.h> #include <stdlib.h> voi

【剑指Offer】替换空格

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 遍历字符串,遇到空格,就把空格后面的所有数后移两个位置: 空格处放'%',空出来的两个位置放'2','0' 代码实现 class Solution { public: void replaceSpace(char *str, int length) { if (length <= 0 || str == N

《剑指Offer》替换空格(将字符串中的空格替换为%20)

题目: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 思路: 这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换. 看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节.这种解法的时间复杂度为O(n^2)!!! 另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度. 该解

剑指offer:替换空格

##题目:请实现一个函数,把字符串中的每个空格替换成%20.例如输入"We are happy.",则输出"We%20are%20happy.". 最容易想到的是,从头到尾扫描,每次碰到空格就替换.但是时间复杂度为o(n2). 时间复杂度为o(n)的解法是: 首先遍历字符串,统计出字符串中空格的总数,然后计算出替换之后的字符串的总长度.然后准备2个指针,P1,P2,.P1,指向原串的末尾,P2指向新串的末尾.然后向前移动,逐个把P1指向的字符复制到P2指向的位置,遇

剑指Offer 2. 替换空格 (字符串)

题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 题目地址 https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2F

剑指offer系列——替换空格?

Q:请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. C:时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M T: 我这是开辟了一个新的字符串帮助,实际上如果字符串较大就并不好. 讨论区主要方法: 1.从后往前插入,这样不需要另辟新的空间. void replaceSpace(char *str,int length) { int oldlen

牛客网-《剑指offer》-替换空格

C++ 1 class Solution { 2 public: 3 void replaceSpace(char *str,int len) { 4 int cnt = 0; 5 for (int i = 0; i < len; i++) { 6 if (str[i] == ' ') cnt++; 7 } 8 int idx = len + cnt * 2 - 1; 9 for (int i = len - 1; i >= 0; i--) { 10 if (str[i] == ' ') {