网站关键字优化合同,WordPress仿app主题,体育门户网站源码,淘宝官网首页电脑版登录入口文章目录 力扣 | 344 反转字符串力扣 | 514 反转字符串 || 剑指offer 05. 替换空格力扣 | 151 . 翻转字符串中的单词剑指offer 58-|| .左旋转字符串 一、344 反转字符串 #xff1a;
344. 反转字符串 - 力扣#xff08;LeetCode#xff09;
整体思路#xff1a; 双指针… 文章目录 力扣 | 344 反转字符串力扣 | 514 反转字符串 || 剑指offer 05. 替换空格力扣 | 151 . 翻转字符串中的单词剑指offer 58-|| .左旋转字符串 一、344 反转字符串
344. 反转字符串 - 力扣LeetCode
整体思路 双指针思想前后两个指针同时向中间靠拢两两交换 对应的值后再同时移动。
解决方案
void reverseString(vectorchar s) {int left0;int rights.size()-1;while( left right ){swap(s[left],s[right]);left;right--;}} 二、 514 反转字符串 ||
题目链接
541. 反转字符串 II - 力扣LeetCode
整体思路 借助库函数 reverse 实现 遍历字符串每次 移动2k 。
补充 reverse 函数 是C中用于反转容器中的元素顺序。左闭右开。
函数原型 first 和 last 表示要反转的序列的起始和结束迭代器。 template class BidirectionalIterator void reverse ( BidirectionalIterator first BidirectionalIterator last ) ; 解决方案
string reverseStr(string s, int k) {int size s.length(); //字符串的长度//每一段的是2kfor(int i 0; i size ; i 2*k){//剩余的字符小于 2k 但是大于或等于kif( ik size ){ reverse(s.begin()i,s.begin()ik);}else{ //剩余得字符少于 k个reverse(s.begin()i,s.end());}}return s;}
三、 剑指offer 05. 替换空格
题目链接
LCR 122. 路径加密 - 力扣LeetCode
由于力扣下架了剑指offer, 所以跳转之后不是我们想要的题目。
题目描述 请实现一个函数把字符串 s 中的每个空格替换成%20。我们这里要求不能使用额外的空间。
示例 1 输入s We are happy. 输出We%20are%20happy.
思路 遍历字符串 将原来的字符串扩大每个空格替换成%20之后的大小。然后双指针的思想从后往前遍历替换空格。
具体解决方案
string replaceSpace(string s){int legth s.length(); //原始的长度int size s.length();for (int i 0; i s.length(); i) {if (s[i] ) {size 2;}}s.resize(size); //重新设置s的大小//从后面往前遍历int kuai legth-1, man size-1;for ( ; kuai 0; kuai--) {if (s[kuai] ) {s[man--] 0;s[man--] 2;s[man--] %;}else {s[man] s[kuai];man--;}}return s;
} 四、151 . 翻转字符串中的单词
题目链接
151. 反转字符串中的单词 - 力扣LeetCode
解题思路 1、去掉字符串多余的空格 双指针的思想 。 2、将字符串整体翻转。 3、再对局部进行翻转。
解题方案 string reverseWords(string s) {int kuai 0, man 0 ;for ( ; kuai s.length(); kuai ) {if (s[kuai] ! ) { //遇到单词了//手动添加空格if (man ! 0) s[man] ;//收集单词while ( kuai s.length() s[kuai] ! ) { //如果遇到空格则停止收集s[man] s[kuai];}}}s.resize(man);//第一次整体翻转reverse(s.begin(), s.end());//第二次局部翻转int temp 0; //辅助 i 来记录一个区间int i 0;while ( i s.length() ) {if ( s[i]! ) {i;continue;}reverse( s.begin() temp , s.begin() i );temp i 1 ;i;}//处理最后一个单词reverse(s.begin() temp, s.end());return s;}
五、剑指offer 58-|| .左旋转字符串
题目链接
LCR 182. 动态口令 - 力扣LeetCode
思路 先整体翻转再局部进行翻转。
解题方案
string dynamicPassword(string password, int target) {//先整体翻转reverse( password .begin() , password.end());//然后局部翻转int size password.length();reverse(password.begin() ,password.begin() (size-target));reverse(password.begin() (size-target), password.end());}
友情链接 代码随想录
代码随想录