信息服务平台有哪些网站,东莞网站关键词,建设音乐主题网站,郑州网站关例题一 解法#xff08;栈#xff09;#xff1a; 算法思路#xff1a; 本题极像我们玩过的「开⼼消消乐」游戏#xff0c;仔细观察消除过程#xff0c;可以发现本题与我们之前做过的「括号匹配」问题是类似的。当前元素是否被消除#xff0c;需要知道上⼀个元素的信息…例题一 解法栈 算法思路 本题极像我们玩过的「开⼼消消乐」游戏仔细观察消除过程可以发现本题与我们之前做过的「括号匹配」问题是类似的。当前元素是否被消除需要知道上⼀个元素的信息因此可以⽤「栈」来保存信息。但是如果使⽤ stack 来保存的话最后还需要把结果从栈中取出来。不如直接⽤「数组模拟⼀个栈」结构在数组的尾部「尾插尾删」实现栈的「进栈」和「出栈」。那么最后数组存留的内容就是最后的结果。 例题二 解法⽤数组模拟栈 算法思路 由于退格的时候需要知道「前⾯元素」的信息⽽且退格也符合「后进先出」的特性。因此我们可以使⽤「栈」结构来模拟退格的过程。 • 当遇到⾮ # 字符的时候直接进栈 • 当遇到 # 的时候栈顶元素出栈。 为了⽅便统计结果我们使⽤「数组」来模拟实现栈结构。 例题三 解法栈 算法思路 由于表达式⾥⾯没有括号因此我们只⽤处理「加减乘除」混合运算即可。根据四则运算的顺序我们可以先计算乘除法然后再计算加减法。由此我们可以得出下⾯的结论 • 当⼀个数前⾯是 号的时候这⼀个数是否会被⽴即计算是「不确定」的因此我们可以先压 ⼊栈中 • 当⼀个数前⾯是 - 号的时候这⼀个数是否被⽴即计算也是「不确定」的但是这个数已经 和前⾯ 的 - 号绑定了因此我们可以将这个数的相反数压⼊栈中 • 当⼀个数前⾯是 * 号的时候这⼀个数可以⽴即与前⾯的⼀个数相乘此时我们让将栈顶的元 素乘上这个数 • 当⼀个数前⾯是 / 号的时候这⼀个数也是可以⽴即被计算的因此我们让栈顶元素除以这个 数。 当遍历完全部的表达式的时候栈中剩余的「元素之和」就是最终结果。 例题四 解法两个栈 算法思路 对于 3[ab2[cd]] 我们需要先解码内部的再解码外部为了⽅便区分使⽤了空格 • 3[ab2[cd]] - 3[abcd cd] - abcdcd abcdcd abcdcd 在解码 cd 的时候我们需要保存 3 ab 2 这些元素的信息并且这些信息使⽤的顺序是从后往 前正好符合栈的结构因此我们可以定义两个栈结构⼀个⽤来保存解码前的重复次数 k 左括号前的数字⼀个⽤来保存解码之前字符串的信息左括号前的字符串信息。 例题五 解法栈 算法思路 ⽤栈来模拟进出栈的流程。⼀直让元素进栈进栈的同时判断是否需要出栈。当所有元素模拟完毕之后如果栈中还有元素那么就是⼀个⾮法的序列。否则就是⼀个合法的序列。