代码随想录笔记--字符串篇

目录

1--反转字符串

2--反转字符串II

3--反转字符串中的单词

4--KMP算法

5--重复的子字符串


1--反转字符串

主要思路:

        双指针算法,交换两个指针的字符;

#include <iostream>
#include <vector>class Solution {
public:void reverseString(std::vector<char>& s) {if(s.size() == 0) return;int l = 0, r = s.size() - 1;while(l < r){std::swap(s[l], s[r]);l++;r--;}}
};int main(int argc, char* argv[]){// s = ["h","e","l","l","o"]std::vector<char> s = {'h', 'e', 'l', 'l', 'o'};Solution S1;S1.reverseString(s);for(auto c : s) std::cout << c << " ";std::cout << std::endl;return 0;
}

2--反转字符串II

主要思路:

        以 2k 个字符为一组进行遍历;

#include <iostream>
#include <string>
#include <algorithm>class Solution {
public:std::string reverseStr(std::string s, int k) {for(int i = 0; i < s.length(); i += 2*k){if(i + k <= s.length()) {std::reverse(s.begin() + i, s.begin() + i + k);}else{std::reverse(s.begin() + i, s.end());}           }return s;}
};int main(int argc, char* argv[]){// s = "abcdefg", k = 2std::string test = "abcdefg";int k = 2;Solution S1;std::string res = S1.reverseStr(test, k);std::cout << res << std::endl;return 0;
}

3--反转字符串中的单词

主要思路1:

        遍历提取每一个有效的单词,存储在一个栈中,最后遍历栈连接字符串即可;空间复杂度为O(N);

#include <iostream>     
#include <stack>         
#include <string>       class Solution {
public:std::string reverseWords(std::string s) {std::stack<std::string> stk;std::string tmp = "";for(int i = 0; i < s.length(); i++){if(s[i] == ' ' && tmp == "") continue; // 单词前的空格else if(s[i] == ' ' && tmp != ""){ // 单词间的空格stk.push(tmp);tmp = "";}else{tmp += s[i];}}stk.push(tmp); //最后一个有效单词std::string res;while(!stk.empty()){if(res.length() == 0) res += stk.top();else{res += " ";res += stk.top();}stk.pop();}return res;}
};int main (int argc, char *argv[]){std::string test = "the sky is blue";Solution S1;std::string res = S1.reverseWords(test);std::cout << res << std::endl;return 0;
}

主要思路2:

        不使用辅助空间,要求空间复杂度为O(1);首先使用快慢指针剔除多余的空格,接着反转所有字符,最后对单词的字符进行再次反转;

#include <iostream>             
#include <string>       
#include <algorithm>class Solution {
public:std::string reverseWords(std::string s) {//去除多余的空格(参考移除数组的元素,使用快慢指针)removeExtraSpace(s);//反转所有字符std::reverse(s.begin(), s.end());//按单词再次反转int start = 0;for(int i = 0; i < s.length(); i++){// 遇到单词间的空格 if(s[i] == ' ') {std::reverse(s.begin()+start, s.begin()+i);start = i + 1;}}// 反转最后一个单词std::reverse(s.begin()+start, s.end());return s;}void removeExtraSpace(std::string &s){int slow = 0;for(int fast = 0; fast < s.length(); fast++){if(s[fast] == ' ') continue;if(slow != 0){ // 单词间的空格s[slow] = ' ';slow++;}while(fast < s.length() && s[fast] != ' '){ //将非空格字符覆盖到slow的位置s[slow] = s[fast];slow++;fast++;}}s.resize(slow);}
};int main (int argc, char *argv[]){std::string test = "the sky is blue";Solution S1;std::string res = S1.reverseWords(test);std::cout << res << std::endl;return 0;
}

4--KMP算法

数据结构笔记--KMP算法的实现

5--重复的子字符串

主要思路:

#include <iostream>
#include <string>
#include <algorithm>class Solution {
public:bool repeatedSubstringPattern(std::string s) {std::string ss = s + s;ss = ss.substr(1, ss.size() - 2);if(ss.find(s) != -1) return true;else return false;}
};int main(int argc, char* argv[]){// s = "abab"std::string test = "abab";Solution S1;bool res = S1.repeatedSubstringPattern(test);if(res) std::cout << "true" << std::endl;else std::cout << "false" << std::endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/94057.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudAlibaba常用组件

SpringCloudAlibaba常用组件 微服务概念 1.1 单体、分布式、集群 单体 ⼀个系统业务量很⼩的时候所有的代码都放在⼀个项⽬中就好了&#xff0c;然后这个项⽬部署在⼀台服务器上就 好了。整个项⽬所有的服务都由这台服务器提供。这就是单机结构。 单体应⽤开发简单,部署测试…

js 正则表达式 验证 :页面中一个输入框,可输入1个或多个vid/pid,使用英文逗号隔开...

就是意思一个输入框里面&#xff0c;按VID/PID格式输入,VID和PID最大长度是4,最多50组 1、页面代码 <el-form ref"ruleForm" :model"tempSet" :rules"rules" label-position"right"> <!-- 最多 50组&#xff0c;每组9个字符…

栈和队列篇

目录 一、栈 1.栈的概念及结构 1.1栈的概念 1.2栈的结构示意图 2.栈的实现 2.1支持动态增长的栈的结构 2.2压栈&#xff08;入栈&#xff09; 2.3出栈 2.4支持动态增长的栈的代码实现 二、队列 1.队列的概念及结构 1.1队列的概念 1.2队列的结构示意图 2.队列的实…

自动化运维工具-------Ansible(超详细)

一、Ansible相关 1、简介 Ansible是自动化运维工具&#xff0c;基于Python开发&#xff0c;分布式,无需客户端,轻量级&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能&#xff0c;ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是a…

说说IO多路复用

分析&回答 IO多路复用 I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流。直白点说&#xff1a;多路指的是多个socket连接&#xff0c;复用指的是复用一个…

低成本32位单片机电动工具无感方波控制方案

RAMSUN介绍基于灵动32位微处理器MM32SPIN0230的BLDC电动工具无感方波控制方案&#xff0c;包括MM32SPIN0230芯片资源。 以下是电动工具无感方波控制方案的简述&#xff1a; MM32SPIN0230电动工具专用板 芯片介绍 MM32SPIN0230系列是灵动微MindSPIN旗下高性能的单电机控制产品…

Qt xml解析之QXmlStreamReader

文章目录 背景QXmlStreamReader简单介绍使用QXmlStreamReader添加头文件<QXmlStreamReader>toString()toInt()完整代码 背景 项目中遇到需要解析某个方法返回的xml字符串&#xff0c;奈何C/C中没有原生的方法可供调用&#xff0c;只能使用第三方库&#xff0c;搜了一圈资…

亚马逊云科技生成式AI技术辅助教学领域,近实时智能应答2D数字人搭建

早在大语言模型如GPT-3.5等的兴起和被日渐广泛的采用之前&#xff0c;教育行业已经在AI辅助教学领域有过各种各样的尝试。在教育行业&#xff0c;人工智能技术的采用帮助教育行业更好地实现教学目标&#xff0c;提高教学质量、学习效率、学习体验、学习成果。例如&#xff0c;人…

【数据结构】栈---C语言版(详解!!!)

文章目录 &#x1f438;一、栈的概念及结构&#x1f344;1、栈的概念定义&#x1f344;2、动图演示&#x1f332;入栈&#x1f332;出栈&#x1f332;整体过程 &#x1f438;二、栈的实现&#x1f438;三、数组结构栈详解&#x1f34e;创建栈的结构⭕接口1&#xff1a;定义结构…

postgres数据库设置id自增

postgres数据库设置id自增 1. 使用SQL语句建立自增序列 CREATE SEQUENCE id_seq START 1;执行结果 ng) 2. 在设计表中使用该序列 nextval(id_seq::regclass)

HTML5-1-标签及属性

文章目录 语法规范标签规范标签列表通用属性基本布局 页面的组成&#xff1a; HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是用来描述网页的一种语言&#xff0c;它不是一种编程语言&#xff0c;而是一种标记语言。 HTML5 是下一代 HTM…

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

【Sql】把数据库字段用函数根据逗号分裂成列表&#xff0c;然后判断列表中是否包含目标值 【1】问题描述【2】Oracle内置函数解决【3】mysql的内置函数INSTR()【4】mysql的内置函数FIND_IN_SET() 【1】问题描述 数据库中【库信息db】和【集群信息cluster】是一对多的关系&…