IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 每天6道题之第十二题:反转每对括号间的字符串 -> 正文阅读

[人工智能]每天6道题之第十二题:反转每对括号间的字符串

前言

本来没看懂题解的时候,我真的是欲哭无泪,一再感叹数据结构真难,但是会了之后发现,这也太简单了吧,而我也太聪明了吧!!!
在这里插入图片描述

题目描述

给出一个字符串 s(仅含有小写英文字母和括号)。

请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

注意,您的结果中不应 包含任何括号。

题目解析

像这种遇见括号的不用想 首先考虑用栈
而且在写的时候一般都是要分三种情况讨论的(下面就本题来说)
(1)遍历到左括号时:遇见左括号的时候,不用反转字母,所以只需要将当前已经遍历到的字符压进栈,等待右括号就行,同时将临时字符串res置为NULL
(2)遍历到右括号时:遇见右括号,就需要进行反转操作了,这道题就是将当前res反转,然后再栈顶元素加上其这个反转过后的字符。
原理就是遇见左括号时进行的是左括号之前的字符入栈,那么当遇到右括号时,右括号先与当前的res配对,这就完成了一对括号间字符串的反转
用栈顶元素加这个反转之后的结果说白了就是将栈顶元素出栈然后等待下一个右括号与之匹配,如果没有,那理所应当的栈顶元素先入栈,说明其在前。如果有,再反转就行了
(3)遍历到字母(非括号)时:遇见字母,就直接保存在临时字符串变量res中,等待遇见左括号时压入栈

完整代码

#include<iostream>
#include<cstring>
#include<stack>
#include <algorithm>
using namespace std;
//题目解析
//像这种遇见括号的不用想 首先考虑用栈
//而且在写的时候一般都是要分三种情况讨论的(下面就本题来说) 
//(1)遍历到左括号时:遇见左括号的时候,不用反转字母,所以只需要将当前已经遍历到的字符压进栈,等待右括号就行,同时将临时字符串res置为NULL 
//(2)遍历到右括号时:遇见右括号,就需要进行反转操作了,这道题就是将当前res反转,然后再栈顶元素加上其这个反转过后的字符。
//		原理就是遇见左括号时进行的是左括号之前的字符入栈,那么当遇到右括号时,右括号先与当前的res配对,这就完成了一对括号间字符串的反转
//		用栈顶元素加这个反转之后的结果说白了就是将栈顶元素出栈然后等待下一个右括号与之匹配,如果没有,那理所应当的栈顶元素先入栈,说明其在前。如果有,再反转就行了 
//(3)遍历到字母(非括号)时:遇见字母,就直接保存在临时字符串变量res中,等待遇见左括号时压入栈 
class Solution{
	public:
		 
		string reverseParentheses(string s){
			stack<string> s1;
			string res="";
			for(int i=0;i<s.length();i++){
				if(s[i]==')'){
					reverse(res.begin(),res.end());
					res=s1.top()+res;
					s1.pop(); 
				}
				else if(s[i]=='('){//如果现在是左括号  
					
					s1.push(res);
					res="";
				}else{//如果现在是字母 
					res+=s[i];
				}
					
			}
			return res;
		}
};



int main(){
	string s;
	cin>>s;
	s=Solution().reverseParentheses(s);
	cout<<s<<endl;
	return 0;
}

写在后面的话

是从7号开始刷题的吧,因为研一开学就要期末考试,就考这些东西,本科的时候确实没怎么接触过算法类的竞赛或者什么,一般就是神经网络用python用的比较多,但是计算机视觉方面,怎么说呢,重在人工吧,自己去搭建一个神经网络吧,不太可能,知识储备不够,利用别人的模型去训练自己的数据,说实话确实是很low的,很快就可以入门。这两天刷题也是时常会自闭,但幸运的是,我有很多谦虚耐心的同学帮助我,今天心血来潮写这段话也是想让自己记住以后不管遇到多困难的题,不要轻易的放弃,去找解决方法,早晚都会解决的,早找解决方法就早解决。

昨天写这道题的时候,我问了沅沅,沅沅给我讲了思路,但是我着手写代码的时候还是不会,心里就很烦,上午看了一上午视频,把这道题就搁置了,下午午睡到四点,志愿者开会又到了吃过晚饭,但总要解决,我再一次求助了沅沅还有梦龙,沅沅每次都会很耐心的先安抚我急躁的心情然后再给我讲她是怎么做的,再次感谢我的同学,梦龙也是并没有含糊我的问题,还和我讨论,让我觉得以后有问题了还可以一起交流,这是我觉得很幸运的事情。

总结一下,就是想说以后遇见任何困难,首先尝试自己解决,借助现在发达的网络资源,借助网友的智慧去帮助自己,如果还是解决不了,就去找你周围比你强的人,这样解决的更快。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:23:47  更:2021-08-11 12:23:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 21:05:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码