详解反转字符串算法题
反转字符串,是经常出现的一种算法题,使用C/C++语言时,通常要求在原地进行反转。
最直接的反转整个字符串,使用的是一前一后双指针的方法
进阶的翻转,同要要涉及到两个指针,只是两个指针就行局部反转
进阶题目:
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
要求:
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。
class Solution {
public:string reverseStr(string s, int k) {int n = s.size();int i=0;while(i<n){if(i+k>n) reverse(s.begin()+i,s.end());else reverse(s.begin()+i,s.begin()+i+k);i=i+2*k;}return s;}
};
两个指针移动的局部反转
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
class Solution {
public:string reverseWords(string s) {int i=0,j=0;while(i<s.size()){while(j<s.size()&&s[j]!=' ') j++;reverse(s.begin()+i,s.begin()+j);i=++j;}return s;}
};
最难的反转字符串
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
详解反转字符串算法题相关推荐
- 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述
算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...
- 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 阅读本文前,请确保你已经掌握了递归.栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作. 深度优先遍 ...
- 【算法知识】详解希尔排序算法
前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序需要移动 ...
- 【算法知识】详解直接插入排序算法
前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 在玩扑克牌的时候,我们抽到一张牌的时候,都是将它插入到当前手中牌的合适位置的. 如下图: (上图来自算法导论) 直接插入排序 ...
- python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法
字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...
- 算法详解_常用算法详解——打印杨辉三角形
杨辉三角,是二项式系数在三角形中的一种几何排列.在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在165 ...
- 最形象的卷积神经网络详解:从算法思想到编程实现(转载)
mark一下,感谢作者分享! 原标题:最形象的卷积神经网络详解:从算法思想到编程实现 1 新智元推荐 查看全文 http://www.taodudu.cc/news/show-4611564.html ...
- DDA画线算法+代码详解-直线扫描算法之一
#DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...
- 小白给小白详解维特比算法(一)
小白给小白详解维特比算法(一) 小白给小白详解维特比算法一 篱笆网络Lattice的最短路径问题 这个问题长什么样子 这个问题难在哪里 简化成这个模样你总能回答了吧 下一步我们该干什么 别倒立了我们再 ...
最新文章
- python 每日温度
- [LGP4707] 重返现世
- 用最简单的方式训练史上最强ResNet-50,性能超过魔改结构的ResNeSt
- mongodb连接失败_mongodb 数据库及数据分页
- TreeView和Menu
- struts2:表单标签续(datetimepicker标签)
- mvc ajax 页面不刷新页面,如何在不刷新页面MVC C#的情况下显示不同的值
- 金电容(法拉电容)与可充放电池的相关知识
- 菜鸡程序员的一天都在折腾些什么?
- 回顾2017、展望2018
- 2016计算机技术操作考试题,2016年计算机二级《VB》上机操作题(1)
- 传奇服务器人物技能怎么修改,传奇服务端上线0级技能,直接设置3级技能的设置方法...
- 北航外国语学院计算机项目,北京航空航天大学外国语学院游学项目.pdf
- C# 串口+示波+数据存储+截图
- 【环信IM集成指南】iOS端常见问题整理(2)
- android 屏幕分辨率 屏幕密度,android分辨率,屏幕尺寸,屏幕密度关系
- 深度学习6---案例:人民币识别实现
- 默纳克服务器密码正确进不去,默纳克常见问题问答
- centos m4安装linux,Centos Docker环境下安装Dcm4che归档服务
- 班主任如何展开期中表彰班会