Coding Interview Guide -- 括号字符串的有效性和最长有效长度
【题目】
给定一个字符串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 -- 括号字符串的有效性和最长有效长度相关推荐
- 括号字符串的有效性和最长有效长度
题目 给定一个字符串str,判断是不是整体有效的括号字符串.例如,str = "()()()",返回True,str = "())" 或 "()a() ...
- Coding Interview Guide -- 翻转字符串
[题目] 给定一个字符类型的数组chas,请在单词间做逆序调整.只要做到单词顺序逆序即可,对空格的位置没有特别要求 举例,如果把chas看作字符串为"dog loves pig", ...
- Coding Interview Guide -- 数组的partition调整
[题目] 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序 例如,arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, ...
- Coding Interview Guide -- 向有序的环形单链表中插入新节点
[题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...
- [译]1-Key-Value Coding Programming Guide 官方文档第一部分
Key-Value Coding Programming Guide 官方文档第一部分 2018.9.20 第一次修正 iOS-KVC官方文档第一部分 Key-Value Coding Program ...
- 匹配左括号或者右括号js_九章算法 | 蚂蚁金服面试题:有效的括号字符串
[题目描述] 给定一个只包含三种类型字符的字符串:'(',')'和 '*', 编写一个函数来检查该字符串是否有效. 我们通过以下规则定义字符串的有效性: 1.任何左括号 '('必须有一个相应的右括号' ...
- 渣基础:比照Hawstein学Cracking the coding interview(1)
<C++ Primer 第五版>书实在是太长,太厚了.总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,决定把它当工具书查看,或者积累足够的C++经验后再翻阅一遍. 目前的打算是 ...
- python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...
- java小编程----给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
package com.henu;import java.util.Arrays;/*** @author limengdong* @date 2019年7月19日* @classroom 208bi ...
最新文章
- 阿里云 超级码力在线编程大赛初赛 第2场 题目1. 三角魔法
- 2021年中国一氧化碳传感器市场趋势报告、技术动态创新及2027年市场预测
- 设计社交网络的数据结构
- 如何判断飞机的年限_身边没有懂车朋友如何购买二手车?
- 在 iOS 客户端上通过 bitcode 为第三方库修复 bug
- ssm房屋租赁管理系统ssm房屋管理系统JSP网上租房系统JSP房产信息网站房屋租赁系统房屋
- 微型计算机97 占有率,第1章++微型计算机基础.ppt
- python列表筛选_巧用python对列表进行筛选
- 信号与系统:因果与非因果系统的理解
- php中mysql_assoc,在PHP中使用mysql_fetch_assoc时出现警告
- 一个小吃摊,一把萨克斯,一名六旬老人将自己的生活演绎得有声有趣。
- 滑动窗口与双指针的区别
- R语言 提取数据中的任意子集
- ssc预测计划 php,千里马全天ssc计划
- 卷积神经网络(CNN)开山之作——LeNet-5。卷积神经网络基本介绍。
- MFC打印及打印预览
- ReactEurope Conf 参会感想
- 使用Hook拦截sendto函数解决虚拟局域网部分游戏联机找不到房间的问题——以文明6为例
- 150ms流畅体验 NBA2KOnline如何网络同步优化
- OpenGIS 的WKB和WKT