找对象:有效的括号 | 刷题打卡

131 阅读2分钟

周末加班的效率简直是太低了,心态疲软,不想简单机械地重复,却又没有能力坚定地改变;时光匆匆流逝,案头的那些书似乎还从来没阅读过,买的时候是最新的,然后一年又一年……

题目描述

分类困难度👍👎
算法简单 (43.77%)2215-
标签 字符串
公司 airbnb | amazon | bloomberg | facebook | google | microsoft | twitter | zenefits

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  • 1.左括号必须用相同类型的右括号闭合。
  • 2.左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

思路分析

经过观察,我们可以利用字符串的特性,当'[],{},()'成对出现时,用 repalce 替换为'',判断最终剩余的字符串就是答案。这里值得注意的是,鉴于能够成功配对时,我们将匹配的两个字符替换为了空,因此,遍历次数为字符串长度一半时,也能达到同样的目的。

AC 代码

暴力解法

/*
 * @lc app=leetcode.cn id=20 lang=javascript
 *
 * [20] 有效的括号
 */

// @lc code=start
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
  const len = s.length / 2;
  for (let i = 0; i < len; i++) {
    s = s.replace("()", "").replace("{}", "").replace("[]", "");
  }
  return !Boolean(s.length);
};
// @lc code=end

待补充

总结

投机取巧往往不在于算法和数据结构有多精湛,而在于对问题本质的理解和背后规律的发现;当然,对语言语法的掌握也是能够成功解题所必须的。

今晚得熬夜把这一周的坑填了,目前的想法是看看别人思路和解法,尝试自己理解一遍;当然要是能够尝试不同语言来解题,估计也是一个了解多种语言的绝佳机会。曾经有位前端大佬说过:“了解一门语言最好的方法,就是用它来解决实际问题”。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情