练手系列(2) 最长有效括号的长度详解编程语言
编程语言 详解 有效 系列 长度 最长 括号 练手
2023-06-13 09:11:51 时间
这是厐果网英雄会(IT虾米网)上的一道题。
原题如下:给定只包含括号字符( 和 ) 的字符串,请找出最长的有效括号内子括号的长度。
举几个例子如下: 例如对于 ( () ,最长的有效的括号中的子字符串是 () ,有效双括号数1个,故它的长度为 2。 再比如对于字符串 ) () () ) ,其中最长的有效的括号中的子字符串是 () () ,有效双括号数2个,故它的长度为4。 再比如对于 ( () () ) ,它的长度为6。
换言之,便是有效双括号 () 数的两倍。
给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。
看到题目立马想到用栈来实现。Java的集合类Vector正好有一个子类Stack,所以就直接拿来用了。
过程先用图片表示一下
再用代码表示:
1 import java.util.Stack; 3 public class Test01 { 4 public static void main(String[] args) { 5 int i = longestValidParentheses(")()(()()"); 6 System.out.println(i); 7 } 9 public static int longestValidParentheses(String s) { 10 // 定义子括号的长度 11 int j = 0; 12 // 将字符串还原为字符数组 13 char[] chs = s.toCharArray(); 14 // 创建一个Stack实例 15 Stack stack = new Stack(); 16 // 遍历字符数组 17 for (int i = 0; i chs.length; i++) { 18 // 如果这个数组元素是右括号,那么就看看栈里面是不是已经有了左括号 19 if (chs[i] == )) { 20 // 如果栈里面为空,那么丢弃这个右括号,找下一个数组元素 21 if (stack.size() 0 stack.peek() == null) { 22 continue; 23 } else if (stack.size() 0 24 (stack.peek().toString()).equals("(")) { 25 // 如果栈里面有一个左括号,那么弹出此左括号,并把长度加上1 26 stack.pop(); 27 j++; 28 } 29 } else { 30 // 如果为左括号,那么直接压入栈 31 stack.push(chs[i]); 32 } 33 } 34 return j * 2; 35 } 36 }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19426.html
cjava相关文章
- 干货:Java并发编程系列之synchronized(一)详解编程语言
- Python模拟http get详解编程语言
- python操作sqlite详解编程语言
- 在spring中使用quartz的一个小例子详解编程语言
- Java面向对象抽象类案例分析详解编程语言
- Go语言圣经–接口约定习题详解编程语言
- java基础之泛型详解编程语言
- Extjs NumberField 开始值 不能大于 结束值详解编程语言
- Node.js开发指南详解编程语言
- Java中HashMap的实现机制详解编程语言
- ORACLE触发器学习详解编程语言
- java判断字符串数组是否有效相关的工具类常用方法详解编程语言
- StringBuilder、StringBuffer和String三者的联系和区别详解编程语言
- 一个完整的Lucene搜索引擎例子demo详解编程语言
- 基础薄弱的同学如何学习java更有效呢详解编程语言
- editormd实现Markdown编辑器写文章功能详解编程语言
- 深入理解Java的接口和抽象类详解编程语言
- BAPI_SALESORDER_CHANGE参数EXTENSIONIN – 更新销售订单增强字段值详解编程语言
- ABAP-多线程处理详解编程语言
- 成本中心领用接口详解编程语言
- CRM创建BP(END USER)详解编程语言
- Hadoop的单机和伪分布式配置详解编程语言