Skip to content

Commit 75db79b

Browse files
committed
add 678
1 parent 6007def commit 75db79b

File tree

2 files changed

+72
-4
lines changed

2 files changed

+72
-4
lines changed

LeetCode/678_javascript.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
2+
3+
// 任何左括号 ( 必须有相应的右括号 )。
4+
// 任何右括号 ) 必须有相应的左括号 ( 。
5+
// 左括号 ( 必须在对应的右括号之前 )。
6+
// * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。
7+
// 一个空字符串也被视为有效字符串。
8+
// 示例 1:
9+
10+
// 输入: "()"
11+
// 输出: True
12+
// 示例 2:
13+
14+
// 输入: "(*)"
15+
// 输出: True
16+
// 示例 3:
17+
18+
// 输入: "(*))"
19+
// 输出: True
20+
// 注意:
21+
22+
// 字符串大小将在 [1,100] 范围内。
23+
24+
/**
25+
* @param {string} s
26+
* @return {boolean}
27+
*/
28+
// 2021.09.12 每日一题
29+
// 使用栈
30+
var checkValidString = function (s) {
31+
// 分别记录左括号和* 的剩余
32+
let left = [];
33+
let asterisk = [];
34+
35+
for (let i = 0; i < s.length; i++) {
36+
if (s[i] == "(") {
37+
left.push(i);
38+
} else if (s[i] == ")") {
39+
// 匹配右括号 左括号减一
40+
// 或者 星号数量减一
41+
if (left.length) {
42+
left.pop();
43+
} else if (asterisk.length) {
44+
asterisk.pop();
45+
} else {
46+
return false;
47+
}
48+
} else {
49+
asterisk.push(i);
50+
}
51+
}
52+
while (left.length && asterisk.length) {
53+
let l = left.pop();
54+
let ast = asterisk.pop();
55+
// 需保证 left 内元素 在星号元素左边
56+
if (l > ast) {
57+
return false;
58+
}
59+
}
60+
return left.length == 0;
61+
};
62+
63+
// 贪心可以优化空间复杂度
64+
// 待定

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@
202202
| 611 | [有效三角形的个数](./LeetCode/611_typescript.ts) | [Valid Triangle Number](https://leetcode-cn.com/problems/valid-triangle-number/) | typescript, | 贪心算法 | medium |
203203
| 633 | [平方数之和](./LeetCode/633_javascript.js) | [Sum Of Square Numbers](https://leetcode-cn.com/problems/sum-of-square-numbers/) | javascript, | 双指针 | medium |
204204
| 671 | [二叉树中第二小的节点](./LeetCode/671_javascript.js) | [Second Minimum Node In a Binary Tree](https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree/) | javascript, | 回溯,递归, BFS,DFS,树 | eazy | |
205+
| 678\* | [有效的括号字符串](./LeetCode/678_javascript.js) | [Valid Parenthesis String](https://leetcode-cn.com/problems/valid-parenthesis-string/) | javascript, | 贪心#,动态规划#,栈 | medium |
205206
| 680 | [验证回文字符串 II](./LeetCode/680_javascript.js) | [Valid Palindrome II](https://leetcode-cn.com/problems/valid-palindrome-ii/) | javascript, | 双指针 | eazy |
206207
| 690 | [图像渲染](./LeetCode/690_javascript.js) | [Employee Importance](https://leetcode-cn.com/problems/employee-importance/) | javascript, | 回溯,递归, BFS,DFS | medium |
207208
| 692 | [前 K 个高频单词](./LeetCode/692_javascript.js) | [Top K Frequent Words](https://leetcode-cn.com/problems/top-k-frequent-words/) | javascript, | 哈希 | medium |
@@ -333,6 +334,7 @@
333334
| 516 | [最长回文子序列](./LeetCode/516_javascript.js) | [Longest Palindromic Subsequence](https://leetcode-cn.com/problems/longest-palindromic-subsequence/) | javascript, | 动态规划 | medium |
334335
| 518 | [零钱兑换 II](./LeetCode/518_javascript.js) | [Coin Change 2](https://leetcode-cn.com/problems/coin-change-2/) | javascript, | 动态规划,DFS | medium |
335336
| 552 | [学生出勤记录 II](./LeetCode/552_javascript.js) | [Student Attendance Record II](https://leetcode-cn.com/problems/student-attendance-record-ii/) | javascript, | 动态规划 | hard |
337+
| 678 | [有效的括号字符串](./LeetCode/678_javascript.js) | [Valid Parenthesis String](https://leetcode-cn.com/problems/valid-parenthesis-string/) | javascript, | 贪心#,动态规划#,栈 | medium |
336338
| 704 | [二分查找](./LeetCode/704_javascript.js) | [Binary Search](https://leetcode-cn.com/problems/binary-search/) | javascript, | 二分 | eazy |
337339
| 714 | [买卖股票的最佳时机含手续费](./LeetCode/714_javascript.js) | [Best Time to Buy and Sell Stock with Transaction Fee](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/) | javascript, | 动态规划 | medium |
338340
| 746 | [使用最小花费爬楼梯](./LeetCode/746_javascript.js) | [min Cost Climbing Stairs](https://leetcode-cn.com/problems/min-cost-climbing-stairs/) | javascript, | 动态规划 | eazy |
@@ -437,6 +439,7 @@
437439
| 581 | [最短无序连续子数组](./LeetCode/581_javascript.js) | [Shortest Unsorted Continuous Subarray](https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/) | javascript, | 贪心算法 | medium |
438440
| 605 | [种花问题](./LeetCode/787_javascript.js) | [Can Place Flowers](https://leetcode-cn.com/problems/can-place-flowers/) | javascript, | 贪心算法 | eazy |
439441
| 611 | [有效三角形的个数](./LeetCode/611_typescript.ts) | [Valid Triangle Number](https://leetcode-cn.com/problems/valid-triangle-number/) | typescript, | 贪心算法 | medium |
442+
| 678 | [有效的括号字符串](./LeetCode/678_javascript.js) | [Valid Parenthesis String](https://leetcode-cn.com/problems/valid-parenthesis-string/) | javascript, | 贪心#,动态规划#,栈 | medium |
440443
| 763 | [划分字母区间](./LeetCode/787_javascript.js) | [Partition Labels](https://leetcode-cn.com/problems/partition-labels/) | javascript, | 哈希表,贪心算法 | medium |
441444
| 787 | [K 站中转内最便宜的航班](./LeetCode/787_javascript.js) | [Cheapest Flights Within K Stops](https://leetcode-cn.com/problems/cheapest-flights-within-k-stops/) | javascript, | 回溯,递归 ,动态规划 ,贪心算法 | medium |
442445
| 789 | [逃脱阻碍者](./LeetCode/789_javascript.js) | [Escape The Ghosts](https://leetcode-cn.com/problems/escape-the-ghosts/) | javascript, | 贪心 | medium |
@@ -649,10 +652,11 @@
649652

650653
---
651654

652-
### 堆(优先队列)
655+
### 堆(优先队列
653656

654-
| # | 题名 | Topic Name | Solution | Keywords | Difficulty | Similar Topics |
655-
| --- | ----------------------------------- | -------------------------------------------- | :---------- | :----------- | :--------: | :------------: |
656-
| 502 | [IPO](./LeetCode/502_javascript.js) | [IPO](https://leetcode-cn.com/problems/ipo/) | javascript, | 堆(优先队列) | hard |
657+
| # | 题名 | Topic Name | Solution | Keywords | Difficulty | Similar Topics |
658+
| --- | ------------------------------------------------ | -------------------------------------------------------------------------------------- | :---------- | :----------------- | :--------: | :------------: |
659+
| 502 | [IPO](./LeetCode/502_javascript.js) | [IPO](https://leetcode-cn.com/problems/ipo/) | javascript, | 堆(优先队列) | hard |
660+
| 678 | [有效的括号字符串](./LeetCode/678_javascript.js) | [Valid Parenthesis String](https://leetcode-cn.com/problems/valid-parenthesis-string/) | javascript, | 贪心#,动态规划#,栈 | medium |
657661

658662
---

0 commit comments

Comments
 (0)