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

襄阳做淘宝网站推广360官网入口

襄阳做淘宝网站推广,360官网入口,wordpress点击慢,合同协议模板♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人… ♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人主页✨✨✨✨✨✨ 这一篇博客我们来探讨一下有关于栈的算法练习题准备好了吗~我们发车去探索算法的奥秘啦~ 目录 前言 删除字符串中所有相邻重复项 比较含退格的字符串 基本计算器Ⅱ 字符串解码 验证栈序列 前言 我们先来简单复习一下栈这个数据结构栈Stack是一种后进先出的数据结构我们可以想象一叠盘子你通常会把新洗好的盘子放在最上面入栈而当你需要用一个盘子时你会从最上面拿走一个出栈你无法直接从中间或底部抽出一个盘子栈的工作原理正是如此。 话不多说我们上题~ 删除字符串中所有相邻重复项 删除字符串中所有相邻重复项 看这题目有点眼熟既然要删除重复字符我们就得记录前面一个字符判断是否重复这也就使用到我们强大的数据结构——栈。 算法思路栈模拟过程 ①创建一个空栈 ②遍历字符串如果栈不为空并且栈顶元素与当前字符相等那么栈顶元素出栈否则当前字符入栈 ③栈中剩余字符出栈保存到字符串中 代码实现 //删除字符串中所有相邻重复项 class Solution { public:string removeDuplicates(string s){//使用数据结构容器——栈stackchar st;//遍历字符串for (auto e : s){//如果栈不为空并且栈顶元素与当前字符相等那么栈顶元素出栈if (st.size() e st.top()){st.pop();}//否则当前字符入栈(包括空栈的情况)else{st.push(e);}}string ret;//保存返回结果while (!st.empty()){ret st.top();st.pop();}//逆序字符串就是正确结果reverse(ret.begin(), ret.end());return ret;} }; 顺利通过~不过这里的代码看起来还是有一些繁琐我们有没有什么办法优化一下主要在于栈中保存的仅仅是字符需要进行提取才能得到我们的答案那我们可以与字符串联系起来~ 优化思路因为要返回的是字符串我们可以使用字符串来模拟栈工作的过程字符串最后一个位置也就是我们的栈顶~ 代码实现 class Solution { public:string removeDuplicates(string s){//字符串模拟栈string st;for (auto e : s){if (st.size() st.back() e){st.pop_back();}else{st e;}}return st;} }; 顺利通过~ 比较含退格的字符串 比较含退格的字符串 这一个题目与第一个题目类似都是使用栈模拟这个过程我们这里直接给出优化的算法思路~ 算法思路字符串模拟栈实现过程 ①根据题目要求每一个字符串进行相同的变化封装成一个函数changeS ②changS函数内部使用字符串模拟栈当栈不为空并且当前字符为‘#时栈顶元素出栈否则当前字符不为’#‘就入栈如果对空文本输入退格字符文本继续为空 ③判断两个字符串变化后是否相等 代码实现 //比较含退格的字符 class Solution { public:bool backspaceCompare(string s, string t){return changeS(s) changeS(t);}string changeS(string s){string ret;for (auto e : s){//当栈不为空并且当前字符为‘#时栈顶元素出栈if (ret.size() e #){ret.pop_back();}else if (e ! #)//小写字母入栈{ret.push_back(e);}}return ret;} }; 顺利通过~ 基本计算器Ⅱ 基本计算器Ⅱ 题目要求我们实现一个简单的计算器我们这里给出一个巧妙的算法思路~ 算法思路使用栈保存正数或者负数 ①栈存储中间结果栈用于存储需要累加的值正数或负数乘除运算立即计算并更新栈顶 ②运算符延迟处理遇到新运算符时只记录遇到下一个数字时才应用上一个运算符 ③处理优先级通过立即计算乘除运算实现先乘除后加减 ④空格直接跳过 ⑤栈中所有数据相加就是计算结果 运算符处理规则 前一个运算符当前数字处理方式st.push(val)-st.push(-val)*st.top() * val/st.top() / val 代码实现 //基本计算器Ⅱ class Solution { public:int calculate(string s){int n s.size();char c ;//运算符号记录stackint st;//栈保存计算结果int i 0;//记录下标while (i n){//如果是空格直接跳过if (s[i] )i;//如果是数字else if (s[i] 0 s[i] 9){//提取数字int val 0;//保存数据while (s[i] 0 s[i] 9){val val * 10 (s[i] - 0);i;}//判断数字前面的运算符if (c ){st.push(val);}else if (c -){st.push(-val);}else if (c *){st.top() * val;}else if (c /){st.top() / val;}}//如果是其他也就是运算符更新符号else{c s[i];}}//取栈中元素相加得到运算结果int ret 0;while (!st.empty()){ret st.top();st.pop();}//返回结果return ret;} }; 顺利通过~这个题目也可以使用数组模拟栈实现功能大家感兴趣可以自己试一试~ 字符串解码 字符串解码 我们需要根据要求进行字符串解码好在给出的字符串是没有空格的并且[ ]也是正确匹配的我们可以进行分情况讨论处理。 算法思路分情况讨论 ①双栈结构使用两个独立栈协同工作 st_int存储数字重复次数 st_str存储字符串片段初始化时st_str压入空字符串作为结果容器 ②四类字符处理逻辑 数字0-9 连续解析完整数字如12→12压入st_int 左括号[ 提取后续连续小写字母如[abc→abc作为新片段压入st_str 小写字母a-z 直接拼接到st_str栈顶字符串末尾 右括号] 弹出st_int栈顶数字n和st_str栈顶字符串s将s重复n次后拼接到新栈顶 ③嵌套解码机制 遇到[时压入新层级遇到]时完成当前层级解码 内层字符串先解码如3[c]→ccc 结果拼接到外层字符串如abccc→abccc 支持任意深度嵌套如3[a2[c]]→accaccacc ④结果生成 最终返回st_str栈顶字符串 初始空字符串作为基础容器 所有层级解码完成后栈顶即完整结果 时间复杂度O(n)空间复杂度O(解码字符串长度) 代码实现 //字符串解码 class Solution { public:string decodeString(string s){stackint st_int;//保存数字stackstring st_str;//保存字符串st_str.push();//插入空字符串分别后续变形int i 0;while (i s.size()){//分情况讨论//如果是数字提取数字入数字栈if (s[i] 0 s[i] 9){int tmp 0;while (s[i] 0 s[i] 9){tmp 10 * tmp (s[i] - 0);i;}st_int.push(tmp);}//如果是[,提取后续字符保存到字符栈else if (s[i] [){i;string tmp;while (s[i] a s[i] z){tmp s[i];i;}st_str.push(tmp);}//如果是字符那么加到字符栈栈顶字符串末尾else if (s[i] a s[i] z){st_str.top() s[i];i;}//如果是],就取数字栈和字符栈栈顶进行拼接else if (s[i] ]){string s st_str.top();int n st_int.top();st_int.pop();st_str.pop();for (int j 0; j n; j){st_str.top() s;//新字符栈拼接重复的字符}i;}}return st_str.top();//字符栈顶就是需要的结果} }; 顺利通过~ 验证栈序列 验证栈序列 我们以前都做过类似的文字题那么使用代码怎么解决呢答案是进行模拟就可以了~ 算法思路使用栈模拟 ①模拟核心逻辑使用栈 st 实时模拟入栈/出栈操作指针 i 跟踪 popped 序列当前位置验证其合法性 ②入栈与即时匹配遍历 pushed 序列每个元素立即入栈入栈后循环检查当栈非空且栈顶元素等于 popped[i] 时→ 弹出栈顶元素→ i 指针后移匹配成功 代码实现 //验证栈序列 class Solution { public:bool validateStackSequences(vectorint pushed, vectorint popped){stackint st;int i 0;//用于遍历出栈序列for (auto e : pushed)//遍历进栈序列{st.push(e);while (st.size() st.top() popped[i]){st.pop();i;}}//通过判断栈是否为空或者i是否走到末尾判断是否为合法出栈序列return st.empty();//return ipopped.size();} }; 顺利通过~ ♥♥♥本篇博客内容结束期待与各位优秀程序员交流有什么问题请私信♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ✨✨✨✨✨✨个人主页✨✨✨✨✨✨
http://www.zqtcl.cn/news/73226/

相关文章:

  • 长沙网站建设湘icp备百度搜索优化
  • 舆情系统排名模板网站seo
  • 建设电子元器件网站做微商能利用的网站有哪些问题
  • 建设营销网站要什么做网站自己申请域名还是建站公司
  • 域名备案网站建设方案wordpress邮件有<>
  • 网站框架优化安全优化大师
  • 泉州做网站便宜互联网推广模式有哪些
  • 长沙建网站速成班东莞哪里建设网站好
  • 网站建设 资质网站开发实训课程的总结
  • 深圳响应式网站设计上传网站程序后又怎么做
  • 成都企业门户网站建设宁波网站制作与推广价格
  • 极速网站制作敦煌网站销售员怎么做
  • 刷百度指数网站中国纪检监察报社级别
  • 大连模板建站系统制作网站小程序
  • isp网站接入做哪些业务怎么接游戏推广的业务
  • 银川品牌网站建设公司广东高端网站设计公司
  • 山东和城乡建设厅网站专业做化学招聘的网站有哪些
  • 网站建设兼职平台通化网站开发
  • 网站建设中的安全问题企业注册平台
  • 功能性质网站有哪些网站怎么查网站点击量
  • 怎么建立一个网站平台高考加油写作网
  • 如何在腾讯云上建设网站低学历吃香的十大职业
  • 微信公众号开发网站开发网络推广公司有多少家
  • 婚恋网站模板下载网件路由器重置
  • 网站建设策划书怎么写工作室网站模板
  • 搜索引擎营销方法主要有三种哈尔滨关键词优化推广
  • 户外运动网站建设策划建设网站的过程
  • asp汽车租凭网站源码下城区做网站
  • 建设平台类网站需要多少钱网站是用虚拟机做还是服务器
  • 移动电子商务网站设计wordpress做手机版