LeetCode刷题191126
博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教。题目及解法来自于力扣(LeetCode),传送门。
今天状态不好,划水第二天。
算法:
题号:20
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
public class Solution { public bool IsValid(string s) { Stack<char> stack = new Stack<char>(); var test = s.ToCharArray(); foreach (var item in test) { if ('}'.Equals(item) || ']'.Equals(item) || ')'.Equals(item)) { if (stack.Count() == 0) { return false; } else { var result = stack.Pop(); if (('}'.Equals(item) && !'{'.Equals(result)) || (']'.Equals(item) && !'['.Equals(result)) || (')'.Equals(item) && !'('.Equals(result))) { return false; } } } else { stack.Push(item); } } if (stack.Count() > 0) { return false; } return true; } }
官方解法传送门。嗯,官方的第二种方法也用到了栈。不过好像思路不太一样。其实也可以用下评论里别人的思路,简化判断,如果栈的深度大于字符串长度的1/2,就返回false。
数据库:
题号:596
有一个courses 表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。
例如,表:
+---------+------------+
| student | class |
+---------+------------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+------------+
应该输出:
+---------+
| class |
+---------+
| Math |
+---------+
Note:
学生在每个课中不应被重复计算。
SELECT class from courses group by class having count(distinct(student)) >= 5
水一道,其实就是去重。