首页 > 其他分享 >力扣-替换空格

力扣-替换空格

时间:2023-09-24 20:11:35浏览次数:29  
标签:空格 下标 int 力扣 字符串 20 include 替换

1.问题

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

示例 1: 输入:s = "We are happy."
输出:"We%20are%20happy."

2.说明

输入说明:

输入一个字符串s

输出说明:

输出替换空格后的字符串

3.范例

输入范例:

we are h

输出范例:

we%20are%20h

4.思路

使用双指针方法,对字符串数组进行扩充空间,而扩充多少则需要对字符串计算其空格个数,再根据将空格替换成%20这三个字符,因此需要在原空间上扩充空格数的2倍;

其次下标代替指针,其中 j =原字符串最后一个字符,i = 扩充空间后的字符串最后一个位置,开始重后往前遍历,s[j]!=' '时,将下标 j 的字符放入 下标 i 处,当=‘ ’时,则在下标i往前三个位置分别放入%20,并将i往前移动3格

5.代码

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class Solution
{
public:
    //替换空格
    string replaceSpace(string s)
    {
        int oldsize=s.size();
        int count=0;
        //1.计算字符串中有多少个空格
        for(int i=0;i<s.size();i++)
        {
            if(s[i]==' ')
                count++;
        }
        //2.扩充数组大小
        s.resize(s.size()+count*2);//weishenme *2呢?原来就有空格一个空间,此处可以放%,增加2个空间,一个空间存2,一个空间存0
        //3.定义双下标,从后往前遍历,j为原s最后一个字符位置,i为扩充后最后一个字符的位置
        int newsize=s.size();
        for(int i=newsize-1,j=oldsize-1;j<i;j--,i--)
        {
            if(s[j]!=' ')
            {
                s[i]=s[j];
            }
            else
            {
                s[i]='0';
                s[i-1]='2';
                s[i-2]='%';
                i -=2;
            }
        }
        return s;
    }
};
int main()
{
    string s;
    getline(cin,s);
    string res=Solution().replaceSpace(s);
    cout<<res<<endl;
    return 0;
}

 

标签:空格,下标,int,力扣,字符串,20,include,替换
From: https://www.cnblogs.com/ohye/p/17726552.html

相关文章

  • 力扣-四数之和
    1.问题给定一个包含 n个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素a,b,c 和d ,使得 a+b+c+d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组nums=[1,0,-1,0,-2,2],......
  • 力扣-三数之和
    1.问题给你一个包含n个整数的数组 nums,判断 nums 中是否存在三个元素a,b,c,使得 a+b+c=0?请你找出所有满足条件且不重复的三元组。注意: 答案中不可以包含重复的三元组。示例:给定数组nums=[-1,0,1,2,-1,-4],满足要求的三元组集合为:[[-1,0,1],[-1,-1,......
  • 力扣-买卖股票的最佳时机(含冷冻期)
    1.问题给定一个整数数组,其中第i个元素代表了第i天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票(即冷冻......
  • 力扣-赎金信
    1.问题给定一个赎金信(ransom)字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回true;否则返回false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符......
  • 力扣---146. LRU 缓存
    请你设计并实现一个满足  LRU(最近最少使用)缓存 约束的数据结构。实现 LRUCache 类:LRUCache(intcapacity) 以 正整数 作为容量 capacity 初始化LRU缓存intget(intkey) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。voidput(intkey,......
  • 力扣-链表组件
    1.问题给定链表头结点head,该链表上的每个结点都有一个唯一的整型值。同时给定列表G,该列表是上述链表中整型值的一个子集。返回列表G中组件的个数,这里对组件的定义为:链表中一段极长连续结点的值(该值必须在列表G中)构成的集合。极长的含义是:这段连续结点的前面或后面结点不......
  • 力扣练习题
    1#include<bits/stdc++.h>2#defineMAXSIZE1003usingnamespacestd;4typedefstruct{5char*base;6char*top;7intstactsize;8}sqstack;9voidinitstack(sqstack&s){10s.base=newchar[MAXSIZE];11if(!s.ba......
  • DM8替换license的方法
    1.适用范围DM82.KEY的所在目录默认key在$DM_HOME/bin的目录下,申请key要提供cpu架构和客户名称和数据库版本,key的类型等,如果数据库上有KEY,在数据库的安装目录的bin目录下,把原有的dm.key改为dm.key.bak,将新的license放到安装目录的bin目录下,名字改为dm.key,如果当前版本,原来没有KEY......
  • 中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表
    随着仪表测点的大幅增多和采样频率的增加,中国核动力研究设计院仪控团队原本基于MySQL搭建的旧系统已经无法满足大量数据并发写入、实时查询和聚合计算的需求。他们在研究DB-Engines时序数据库榜单时了解到国内排名第一的DolphinDB。经过测试,发现其非常符合业务需求,并且在2022......
  • 力扣6.N 字形变换(压缩矩阵)
    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请......