当前位置: 首页 > news >正文

网站开发比较流行的框架东莞建设企业网站公司

网站开发比较流行的框架,东莞建设企业网站公司,连连跨境电商网站怎么做,浙江网站建设价位​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 有效的括号删除字符串中的所…

在这里插入图片描述

​📝个人主页:@Sherry的成长之路
🏠学习社区:Sherry的成长之路(个人社区)
📖专栏链接:练题
🎯长路漫漫浩浩,万事皆有期待

文章目录

  • 有效的括号
  • 删除字符串中的所有相邻重复项
  • 逆波兰表达式求值
  • 总结:

有效的括号

20. 有效的括号

在这里插入图片描述

这道题相信学过数据结构的同学应该并不陌生,这道题是一道在学习栈的时候的一道十分经典的题型,起初第一次接触的时候,多少会有点感觉难,现在做来还行的。

题目要求就是将所有的括号匹配起来,主要有两种情况会匹配失败:
一种是左括号或者右括号出现多余的情况,另一种情况是前一个括号与后一个括号不能连续匹配,我们可以根据栈这个数据结构的特点,使左括号字符都放进去,遇到右括号的时候,top一下看看栈顶元素是否为相匹配的左括号,如果相匹配我们将其弹出栈,然后接着遍历,如果不匹配我们直接return false

注意:如果在碰到右括号时候栈为空则说明栈中没有左括号,那么此时直接弹出,说明右括号有多余的。如果将整个字符都遍历完了,依然没有return,那么则说明第二种情况已经判断完毕,并没有括号不匹配的情况出现,但是此时并不代表就一定没有错误,当匹配完毕之后如果栈中还剩下括号说明左括号有多余的。

class Solution {
public:bool isValid(string s) {stack<int> arr1;for(int i=0;i<s.size();i++){if(s[i]!=')'&&s[i]!='}'&&s[i]!=']'){arr1.push(s[i]);}if(s[i]==')'){if(arr1.empty()==true||arr1.top()!='('){return false;}else{arr1.pop();}}if(s[i]=='}'){if(arr1.empty()==true||arr1.top()!='{'){return false;}else{arr1.pop();}}if(s[i]==']'){if(arr1.empty()==true||arr1.top()!='['){return false;}else{arr1.pop();}}}if(arr1.empty()==true){return true;}else{return false;}}
};

还有另一种思路:在遇到左括号时候往栈里直接加入右括号,然后碰到右括号时候在进行判断,和上一种思路基本上是一样的。

class Solution {
public:bool isValid(string s) {if(s.size()%2!=0){// 如果s的长度为奇数,一定不符合要求return false;}stack<char>st;for(int i=0;i<s.size();i++){if(s[i]=='('){st.push(')');}else if(s[i]=='{'){st.push('}');}else if(s[i]=='['){st.push(']');}// 第二种情况:遍历字符串匹配的过程中,发现栈里没有我们要匹配的字符。所以return false// 第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return falseelse if(st.empty()||st.top()!=s[i]){return false;}else{ // st.top() 与 s[i]相等,栈弹出元素st.pop();}}// 第一种情况:此时我们已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false,否则就return truereturn st.empty();}
};

删除字符串中的所有相邻重复项

1047. 删除字符串中的所有相邻重复项

在这里插入图片描述

这道题是消除字符串中连续的字符,只要有相邻重复就直接删除,所以并不是我们第一眼看到只有一处相邻相同字符就只删一次,可能在删除一处之后又有新的元素碰到一起,这时栈派上了用场,它可以存储我们遍历过的数据,我们只需要判断当前遍历的数据是否和栈顶元素一样,一致就将其弹出,这样不仅解决了表面的相邻相同字符消去,当消去后如果有两个新的相邻相同元素碰到一起了,我们也能发现并消除他们,一举多得。

class Solution {
public:string removeDuplicates(string s) {stack<int> st;for(char s1:s){if(st.empty()||s1!=st.top()){st.push(s1);}else{st.pop();// s 与 st.top()相等的情况}}string result="";while(!st.empty()){// 将栈中元素放到result字符串汇总result+=st.top();st.pop();}reverse(result.begin(),result.end()); // 此时字符串需要反转一下return result;}
};

上面的代码我们用字符串来模拟栈的一个实现,让字符串的头部充当栈底,尾部充当栈顶,这样做的好处是避免了直接使用栈的时候数据元素是倒序且还要转换为字符串输出。

class Solution {
public:string removeDuplicates(string s) {string result;for(char s1:s){if(result.empty()||result.back()!=s1){result.push_back(s1);}else{result.pop_back();}}return result;}
};

逆波兰表达式求值

150. 逆波兰表达式求值
在这里插入图片描述

逆波兰表达式求值,这道题的难度是中等题,并不是是它有多么难的思路,而是如果你没有接触到这个题,不是很容易想到解题思路,逆波兰表达式,实际上就是一种后缀表达式,可以把我们日常熟悉的一个等式(1+2)* (3*4)看成中序表达式,画树形图很容易得出,那么后续表达式大题运算思路就是两个数遇到符号再进行运算操作,没遇到符号时候先保留起来,每次遇到符号拿出两个操作数操作,这种思路很适用于栈的数据结构。

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;for(int i=0;i<tokens.size();i++){if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){long long num1=st.top();st.pop();long long num2=st.top();st.pop();if(tokens[i]=="+"){st.push(num1+num2);}if(tokens[i]=="-"){st.push(num2-num1);}if(tokens[i]=="*"){st.push(num2*num1);}if(tokens[i]=="/"){st.push(num2/num1);}}else{st.push(stoll(tokens[i]));//在C++中,std::stoll函数用于将字符串转换为长整型(long long)数据类型。}}int result= st.top();st.pop();// 把栈里最后一个元素弹出(其实不弹出也没事)return result;}
};

具体代码如上,在未碰到操作符时,将数字入栈,遇到操作符再取出两个操作符,值得注意的是操作数顺序很重要是第二个操作数相对于第一个操作数来进行操作,数据放入里的stoll函数,作用是将字符串转换为long数据类型。此外这道题并不需要我们来判断传输进来的数据是否合法,只需要我们写出判断字符和数据的代码即可。

总结:

今天我们完成了有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值三道题目,相关的思想需要多复习回顾。接下来,我们继续进行算法练习·。希望我的文章和讲解能对大家的学习提供一些帮助。

当然,本文仍有许多不足之处,欢迎各位小伙伴们随时私信交流、批评指正!我们下期见~

在这里插入图片描述

http://www.hkea.cn/news/311823/

相关文章:

  • 怎么看网站的建设时间推广公司品牌
  • 营销型网站有什么特点英语培训机构
  • 学院网站的系统建设方式宝鸡网站seo
  • 网站客户端怎么做的百度一下了你就知道官网
  • 有什么推广方法优化大师电脑版官方
  • 自己做网站的服务器上海网站建设公司排名
  • 跳蛋塞逼做多的视频网站百度广告联盟官网
  • 房地产网站开发文档企业查询
  • 做emu对网站有什么要求十大免费无代码开发软件
  • 扬州专业做网站做关键词优化
  • 宿州网站建设贰聚思诚信网站服务器
  • 用照片做模板下载网站好百度爱采购官方网站
  • 微网站建设套餐网络营销是做什么的
  • 徐州有哪些做网站苏州网站建设费用
  • 统一企业信息管理系统网站直通车怎么开效果最佳
  • 武汉外贸网站建设公司外链相册
  • java做网站的权限管理seo描述是什么
  • 招聘网最新招聘信息网武汉seo计费管理
  • 直播软件开发源码重庆seo顾问
  • 公司网站如何做宣传百度视频推广怎么收费
  • 淄博市 网站建设报价郑州seo外包阿亮
  • 网络服务商是指什么网站优化排名工具
  • 网站优化的分析比较好的品牌策划公司有哪些
  • 国外比较好的资源网站电商运营推广是做什么的
  • 佛山房地产网站建设seo实战培训王乃用
  • 如何做可以赚钱的网站关键词如何快速排名
  • 深圳品牌做网站公司有哪些百度app推广
  • 重庆建设行业信息网站搜狗登录入口
  • 同仁行业网站建设报价北京做的好的seo公司
  • 陕西自助建站做网站郑州外语网站建站优化