今天是算法训练的第八天。

目录

前言

一、反转字符串

解题思路:

二、反转字符串||

题目描述:

解题思路:

三、替换空格

解题思路:

四、反转字符串中的单词

解题思路:

五、左旋转字符串

解题思路:

总结


前言

今日文案:

如果说艰难险阻是人生的黑夜,那么自信就是照亮黑夜的火把。自信的目光是自豪的,自信的微笑是成熟的,自信的力量是巨大的,自信的神态是从容的。


一、反转字符串

题目描述:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

题目来源:

力扣

解题思路:

就是一个简单双指针,很反转数组一样。

class Solution {
public:void reverseString(vector<char>& s) {int n=s.size();int left=0,right=n-1;while(left<right){int temp=s[left];s[left]=s[right];s[right]=temp;right--;left++;}}
};

二、反转字符串||

题目描述:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

题目来源:

力扣

解题思路:

关键是判断字符串剩余的长度,还有指针所指的位置。

class Solution {
public:string reverseStr(string s, int k) {int n=s.size();int left,right;for(int i=0;i<n;i+=(k*2))        //每次i自增2k{    if(i+k<n)                    //也就是right还在字符串范围内{left=i;                  //left,每次加2kright=i+k-1;                //right与left的距离其实是固定的,可以用笔算}else{left=i;                //如果right已经超了,那就直接指向末端right=n-1;}while(left<right)            //交换{int temp=s[left];s[left]=s[right];s[right]=temp;right--;left++;}}return s;}
};

三、替换空格

题目描述:

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

示例 1:

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

题目来源:

力扣

解题思路:

我一开始最早想到的是遍历到空格就直接插入%20,不是简简单单?但是,%20是三个字符,但空格却只是一个,这就不够空间了,所有扩大空间是必要的,那么一个变三个,我们就是扩大空间就行。

那我们要怎么做,重新申请一个大数组,再遍历输入???可以,但没必要,我们看一下这种双指针解法。

class Solution {
public:string replaceSpace(string s) {int n1=s.size(),count=0;for(int i=0;i<n1;i++)        //遍历{if(s[i]==32)            //要是是空格就记录{count++;}}s.resize(n1+count*2);        //加大空间int n2=s.size();for(int i=n1-1,j=n2-1;i<j;i--,j--)          //从后开始遍历{if(s[i]!=32)                            //前面没有遇到空格之前,就搬运{s[j]=s[i];}else                        //遇到空格了,后面先存放%20然后后面继续遍历{s[j]='0';s[j-1]='2';s[j-2]='%';j=j-2;}}return s;}
};

四、反转字符串中的单词

题目来源:

力扣

解题思路:

这道题,我一开始看真的懵了,写不出来要怎么反转字符串里的单词,我只会整个反转,直接看代码吧。

class Solution {
public:void Delet(string &s,int start,int end){int slow=0,j=0;for(int i=start;i<=end;i++){if(s[i]!=' ')                    //等于字母的时候开始操作了{if(slow!=0)       //如果slow不在开头了,可以直接手动加一个空格,作为单词间隔{s[slow]=' ';    slow++;}while(i<s.size()&&s[i]!=' ')    //搬运{s[slow]=s[i];slow++;i++;}}}s.resize(slow);}void myswap(string &s,int left,int right){while(left<right)            //交换字符{int temp=s[left];s[left]=s[right];s[right]=temp;left++;right--;}}string reverseWords(string s) {int start=0,end=s.size()-1,i=0,j=0,count=0;Delet(s,start,end);myswap(s,start,s.size()-1);while(i<=s.size())            //注意判断好i,和j的值{if(s[i]==' '){myswap(s,j,i-1);j=i+1;}i++;}myswap(s,j,s.size()-1);        //后面要多做一组,因为最后一组已经退出了return s;}
};

五、左旋转字符串

题目来源:

力扣

解题思路:

三步走,左部分反转,右部分反转,全部反转。

class Solution {
public:string reverseLeftWords(string s, int n) {reverse(s.begin()+n,s.end());reverse(s.begin(),s.begin()+n);reverse(s.begin(),s.end());return s;}
};

总结

加油!

Day8——反转字符串、反转字符串||、替换空格、反转字符串里的单词、左旋字符串相关推荐

  1. 字符串一:替换空格()

    /**  * 题目:替换空格()  * 描述:请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Ar ...

  2. LeetCode--151. 翻转字符串里的单词(字符串翻转,字符串分割)

    翻转字符串里的单词(双指针,字符串分割) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题我们需要注意的点有以下几个: 每个 ...

  3. python剑指offer替换空格_《剑指Offer》字符串 替换空格

    //str.replace(char oldChar,char newChar);用字符newChar替换oldChar;返回一个新的字符串 public class Solution { publi ...

  4. 剑指 Offer 05. 替换空格【字符串】

    剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出 ...

  5. 通过excel自带的VLOOKUP函数实现字符串自动查找替换

    通过excel自带的VLOOKUP函数实现字符串自动查找替换. 通过此功能实现自动翻译海外字符串的功能. 步骤1. 准备工作: 准备好之前翻译过的比较完整的字符串表ref_list.txt和待翻译的表 ...

  6. 剑指offer:面试题05. 替换空格

    题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 输入:s = "We are happy." 输出:"We%20are% ...

  7. URL化 替换空格

    URL化 替换空格 编写一种方法,将字符串中的空格全部替换为%20.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实"长度. 示例 1: 输入:"Mr J ...

  8. 替换空格---StringBuilder

    问题:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出:"We% ...

  9. 剑指Offer 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 替换空 ...

  10. 剑指offer:替换空格

    替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出:"We%20a ...

最新文章

  1. 拒绝+启示+TED+被拒的100天+What I learned from 100 days of rejection
  2. Leetcode 82. 删除排序链表中的重复元素 II (每日一题 20210908)
  3. Qt 可编辑的树模型(Tree Model)的一个实例
  4. 作为一名程序员,我站在人生的十字路口
  5. 数据结构之查找算法:散列查找
  6. [题解]诸侯安置(dp+组合)
  7. pano2vr保存的html打不开,pano2VR输出文件打不开
  8. ZOJ3594 Sexagenary Cycle
  9. 基于RouteOS的NAT Radius网络计费管理实验
  10. 怎么获取计算机用户权限,Windows7怎么获取administrator权限?
  11. IOS面试攻略(1.0)
  12. 基于php+mysql的手机销售管理系统
  13. 关于小米手机无法将照片添加到图库解决方法
  14. 网络协议分为哪几层---物理层,连接层,网络层,传输层,应用层详解
  15. cn2an:中文数字转阿拉伯数字
  16. Django如何发送电子邮件?
  17. 加密数据储存工具:Keychain 介绍与使用
  18. Eclipse 字体、字号的设置、最佳字体推荐
  19. 极速office(Word)文字如何竖向
  20. zipkin ui界面详解

热门文章

  1. sci-ei求中啊啊啊
  2. 乔治·霍兹(George Hotz):特斯拉、谷歌最可怕的对手!
  3. 总结-空洞卷积(Dilated/Atrous Convolution)、gridding问题以及解决方案、训练技巧BN和PReLU、CReLU
  4. XML文件的一些操作
  5. tensorflow入门教程(三十五)facenet源码分析之MTCNN--人脸检测及关键点检测
  6. Mysql组合索引使用和用法
  7. 计算机网络原理 作业
  8. 解决netsh winsock reset找不到指定文件
  9. 天翼云 杭州 云主机(VPS) 性能评测
  10. oracle arc安装教程,ArcSDE Oracle的安装教程