代码随想录day11

这篇具有很好参考价值的文章主要介绍了代码随想录day11。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

20. 有效的括号

代码随想录day11,java,python,前端

 

思路:这里用模拟栈的方法会更好理解,也就是我们每次遇到朝左方向的三种类型的时候,就加入相反方向的右括号到result栈中。由于栈是一个先进后出的方式,所以我们会有一个判断stack当前为不为空,和stack[-1]是不是和当前循环到的括号相同。如果说相同,那就说明我们之前已经加入过对应的左括号,就可以直接pop,如果不同,就说明这个字符并不是按照顺序来排列的,比如说[(])。 当我们循环到“]"的时候,会发向stack[-1]是')'的,但是我们之前也确实加入过‘]"这个括号,但是他们两个这里并不相等,说明他们并不是按照对应的括号类型来排列的,所以也就不是有效的括号,就可以直接return False了。

代码:

        文章来源地址https://www.toymoban.com/news/detail-534787.html

def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i=='{':
                stack.append("}")
            elif i=='(':
                stack.append(')')
            elif i=='[':
                stack.append(']')
            elif not stack or stack[-1]!=i:
                return False 
            else:
                stack.pop()
        return len(stack)==0
1047. 删除字符串中的所有相邻重复项

代码随想录day11,java,python,前端

比较简单的一道题目

思路:还是用栈的方法来记录,因为这里栈可以帮助我们记录上一次的元素是什么

如果说当前元素不在栈中,那么我们就入栈,如果在栈中,我们需要同时判断当前元素是不是栈的最后一个元素,也就是我们上次加入的元素。如果是,那么就构成了相邻的重复项,这里进行栈的pop操作。那么如果不等于,就说明当前元素和上一个不是相邻重复项,正常添加即可

代码:

def removeDuplicates(self, s: str) -> str:
        stack = []
        for x in s:
            if x in stack and x==stack[-1]:
               stack.pop()
            else:
                stack.append(x)
        return ''.join(stack)

150. 逆波兰表达式求值 

代码随想录day11,java,python,前端
代码随想录day11,java,python,前端

这里刚开始看可能会比较懵逼,看下图的这个例子了解什么是逆波兰式子

代码随想录day11,java,python,前端 

 

 逆波兰式就是把算法运算符放到后面操作,计算机认为这个很简单识别。

思路:

        当我们判断当前元素如果是算法运算符号,我们就用一个result去记录栈中上两个数字的对应的算法操作符,比如当前是+,那么我们的result = stack[-1] + stack[-2].这里+和*都是按照这个顺序,但是当我们碰到-和/的时候,这里是用stack[-2]  - stack[-1] 或者是stack[-2]/stack[-1].

        然后将栈中的前两个元素弹出,因为我们已经记录过他们之间的操作了,所以不需要他们了,然后将result加入栈中,知道遇见下一个操作符然后重复上面的步骤。

代码:

        

stack = []
        for x in tokens:
            if x=="+":
                result = stack[-1] + stack[-2]
            elif x=='-':
                result = stack[-2]-stack[-1]
            elif x=='/':
                result = stack[-2]/stack[-1]
            elif x=='*':
                result = stack[-1]*stack[-2]
            else:
                stack.append(int(x))
                continue 
            stack.pop()
            stack.pop()
            stack.append(int(result))
        return stack[-1]   

到了这里,关于代码随想录day11的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录day02

    ● 力扣题目链接 ● 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 思路 ● 暴力排序,时间复杂度O(n + nlogn) ● 使用双指针,时间复杂度O(n) 代码 ● 力扣题目链接 ● 给定一个含有 n 个正整数的数组和一个正整

    2024年02月13日
    浏览(27)
  • 代码随想录day01

    ● 思维不难,主要是考察对代码的掌控能力 ● 内存中的存储方式:存放在连续内存空间上的相同类型数据的集合 ● 数组可以通过下标索引获取到下标对应的数据 ● 数组下标从0开始 ● 因为内存空间地址连续,因此删除或增加元素的时候,难免移动其他元素地址 ● Java中的

    2024年02月13日
    浏览(37)
  • 代码随想录Day62

    今天继续学习单调栈解决相关问题。 nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。 对于每个 0 = i nums1.length ,找出满足 nums1

    2024年02月01日
    浏览(35)
  • 代码随想录day6

    一开始想着构建两个hash表,但如果后面字符串长的可能会超时 这里借用数组构建hash表,主要思想是26个字母组成的数组统计出现次数 如果有出现次数为非0,则说明有问题,可以加以利用作为判断条件 这里对乱序的子字符串先排序,排序后的结果是否一致可以作为分组的依

    2024年02月04日
    浏览(38)
  • 代码随想录day42(背包)

    2024年02月13日
    浏览(27)
  • 代码随想录day7

    目录 第454题.四数相加II 思路: 383. 赎金信 思路: 第15题. 三数之和 思路: 力扣题目链接 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 = i, j, k, l n nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0   示例 1: 输入:nums1 = [1,2

    2024年02月10日
    浏览(28)
  • 【代码随想录】刷题Day47

    198. 打家劫舍 1.dp数组含义:dp[i]为i位置下的最大能得到的价值 2.根据条件:相邻不能偷。i位置的最大价值取决于i-1位置是否已经偷过了。如果偷过了,i位置的最大价值就是dp[i-1],即i位置的物品不偷;如果没有偷过,i位置的最大价值就是dp[i-2]+nuvms[i],i位置的数和对应的d

    2024年02月07日
    浏览(27)
  • 【代码随想录】刷题Day35

    860. 柠檬水找零 1.如果第一个顾客没有五元,那么直接返回false,因为店主开始没有零钱 2.定义两个int,一个记录5元,一个记录10元,随后遍历整个数组,会出现三种情况: 如果顾客给5元,直接num5加一 如果顾客给10元,判断num5是否大于0,大于则num5--,num10++;反之返回false

    2024年02月06日
    浏览(23)
  • 【代码随想录】刷题Day36

    435. 无重叠区间 先从小到大排序,其实本题依然是求出共同区域,只不过题目需要我们删除尽量少的区间。所以我们需要删除的一定是范围跨度大的并且跟其他有公共区间的区域。所以每次更新右边范围都需要考虑最小的范围。 1.if(intervals[i][0]end),说明有重复的区间,那么我

    2024年02月07日
    浏览(33)
  • 【代码随想录】刷题Day31

    455. 分发饼干 贪心的思路就是:小的饼干尽量去匹配胃口小的孩子,这样才能实现尽可能多孩子吃到。 那么代码就很好写了: 1.排序g和s,这样方便查找小的数 2.饼干的位置不停遍历,对应我们需要一个ret代表当前孩子位置 3.如果当前位置为孩子的数量,说明ret记录下所有的

    2024年02月06日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包