题目

  给定一个字符串str,判断是不是整体有效的括号字符串

  举例,str = "()",返回true;str = "(()())",返回true;str = "(())",返回true;

    str = "())",返回false;str = "()(",返回false;str = "()a()",返回false;

my:

 1     import java.util.Stack;
 2
 3     public boolean my_isValid(String str)
 4     {
 5         if(str == null || str.equals(""))
 6         {
 7             return false;
 8         }
 9
10         char[] cstr = str.toCharArray();
11         Stack<Character> stack = new Stack<>();
12         for(char c : cstr)
13         {
14             if(c == '(')
15             {
16                 stack.push(c);
17             }
18             else if(c == ')')
19             {
20                 if(stack.empty())
21                 {
22                     return false;
23                 }
24                 stack.pop();
25             }
26             else
27             {
28                 return false;
29             }
30         }
31         return stack.empty() ? true : false;
32     }

时间复杂度:O(N),空间复杂度:O(N)

左老师:

 1     public boolean isValid(String str)
 2     {
 3         if(str == null || str.equals(""))
 4         {
 5             return false;
 6         }
 7
 8         char[] chas = str.toCharArray();
 9         int count = 0;     // 简单地设置一个计数器
10         for(char c : chas)
11         {
12             if(c != '(' && c != ')')
13             {
14                 return false;
15             }
16             if(c == ')' && --count < 0)
17             {
18                 return false;
19             }
20             if(c == '(')
21             {
22                 count++;
23             }
24         }
25
26         return count == 0;
27     }

时间复杂度:O(N),空间复杂度:O(1)

进阶题目

  给定一个括号字符串str,返回最长的有效括号子串的长度

  举例,str = "(()())",返回6;str = "())",返回2;str = "()(()()(",返回4

动态规划:

 1     public int maxLength(String str)
 2     {
 3         if(str == null || str.equals(""))
 4         {
 5             return 0;
 6         }
 7
 8         char[] chas = str.toCharArray();
 9         int[] dp = new int[chas.length];
10         int pre = 0;
11         int res = 0;
12         for(int i = 1; i < chas.length; i++)
13         {
14             if(chas[i] == ')')
15             {
16                 pre = i - dp[i - 1] - 1;
17                 if(pre >= 0 && chas[pre] == '(')
18                 {
19                     dp[i] = dp[i - 1] + 2 + (pre > 0 ? dp[pre - 1] : 0);
20                 }
21             }
22             res = Math.max(res, dp[i]);
23         }
24         return res;
25     }

来源:左程云老师《程序员代码面试指南》

转载于:https://www.cnblogs.com/latup/p/10994537.html

Coding Interview Guide -- 括号字符串的有效性和最长有效长度相关推荐

  1. 括号字符串的有效性和最长有效长度

    题目 给定一个字符串str,判断是不是整体有效的括号字符串.例如,str = "()()()",返回True,str = "())" 或 "()a() ...

  2. Coding Interview Guide -- 翻转字符串

    [题目] 给定一个字符类型的数组chas,请在单词间做逆序调整.只要做到单词顺序逆序即可,对空格的位置没有特别要求 举例,如果把chas看作字符串为"dog loves pig", ...

  3. Coding Interview Guide -- 数组的partition调整

    [题目] 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序 例如,arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, ...

  4. Coding Interview Guide -- 向有序的环形单链表中插入新节点

    [题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...

  5. [译]1-Key-Value Coding Programming Guide 官方文档第一部分

    Key-Value Coding Programming Guide 官方文档第一部分 2018.9.20 第一次修正 iOS-KVC官方文档第一部分 Key-Value Coding Program ...

  6. 匹配左括号或者右括号js_九章算法 | 蚂蚁金服面试题:有效的括号字符串

    [题目描述] 给定一个只包含三种类型字符的字符串:'(',')'和 '*', 编写一个函数来检查该字符串是否有效. 我们通过以下规则定义字符串的有效性: 1.任何左括号 '('必须有一个相应的右括号' ...

  7. 渣基础:比照Hawstein学Cracking the coding interview(1)

    <C++ Primer 第五版>书实在是太长,太厚了.总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,决定把它当工具书查看,或者积累足够的C++经验后再翻阅一遍. 目前的打算是 ...

  8. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  9. java小编程----给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

    package com.henu;import java.util.Arrays;/*** @author limengdong* @date 2019年7月19日* @classroom 208bi ...

最新文章

  1. 阿里云 超级码力在线编程大赛初赛 第2场 题目1. 三角魔法
  2. 2021年中国一氧化碳传感器市场趋势报告、技术动态创新及2027年市场预测
  3. 设计社交网络的数据结构
  4. 如何判断飞机的年限_身边没有懂车朋友如何购买二手车?
  5. 在 iOS 客户端上通过 bitcode 为第三方库修复 bug
  6. ssm房屋租赁管理系统ssm房屋管理系统JSP网上租房系统JSP房产信息网站房屋租赁系统房屋
  7. 微型计算机97 占有率,第1章++微型计算机基础.ppt
  8. python列表筛选_巧用python对列表进行筛选
  9. 信号与系统:因果与非因果系统的理解
  10. php中mysql_assoc,在PHP中使用mysql_fetch_assoc时出现警告
  11. 一个小吃摊,一把萨克斯,一名六旬老人将自己的生活演绎得有声有趣。
  12. 滑动窗口与双指针的区别
  13. R语言 提取数据中的任意子集
  14. ssc预测计划 php,千里马全天ssc计划
  15. 卷积神经网络(CNN)开山之作——LeNet-5。卷积神经网络基本介绍。
  16. MFC打印及打印预览
  17. ReactEurope Conf 参会感想
  18. 使用Hook拦截sendto函数解决虚拟局域网部分游戏联机找不到房间的问题——以文明6为例
  19. 150ms流畅体验 NBA2KOnline如何网络同步优化
  20. OpenGIS 的WKB和WKT

热门文章

  1. 学习linux问题,小白学习linux遇到的问题汇总
  2. Linux 中安装 Mysql
  3. icon-font-generator 的使用
  4. js中 switch 注意事项
  5. SpringMVC之源码分析--ThemeResolver(三)
  6. Docker技术入门与实战
  7. [JS] IE下ajax请求不生效或者请求结果不更新
  8. Flex4之皮肤定制
  9. BlueHost Gzip优化JS和CSS传输
  10. Log4j的简单配置使用