算法刷题手记(1)

描述

你将得到一个由小写字母 a-z ,左括号 '(' 和右括号 ')' 构成的字符串 s
你的任务是删除尽可能少的括号,使得 s 里面的括号匹配。
你需要返回删除括号后的字符串。
由于答案可能会有很多,所以你只需要返回任意一个正确答案。如果答案正确会提示 It is a correct answer.

例如:"()""(())""()()""(())()" 是括号匹配的字符串, 而 ")(""(()""()()(""()())" 则是括号不匹配的字符串。

 

 1 public String removeParentheses(String s) {
 2         // write your code here.
 3         /**
 4          * 创建一个栈用于存放‘(’的索引
 5          */
 6         Stack<Integer> locations = new Stack<>();
 7 
 8         /**
 9          * 将待处理字符串转换为char数组
10          */
11         char[] chars = s.toCharArray();
12         for (int i = 0; i < chars.length; i++) {
13             /**
14              * 遍历字符数组,如果为‘(’,入栈
15              */
16             if (chars[i] == '(') {
17                 locations.push(i);
18             }
19             /**
20              * 遍历字符数组,如果为‘)’,且栈不为空( 即‘)’前面有‘(’->合理->出栈‘(’ );
21              * 如果栈为空,即‘)’前面没有有‘(’->不合理->将当前‘)’位置变成‘*’  注:‘*’在最后转为字符串被忽略,一个标记而已。
22              */
23             if (chars[i] == ')') {
24                 if (locations.isEmpty()) {
25                     chars[i] = '*';
26                 } else {
27                     locations.pop();
28                 }
29 
30             }
31         }
32 
33         /**
34          * 判断遍历结束 栈是否为空,如果为空说明'(' 够用,即使有多余的')',也在遍历时候变成了‘*’;
35          * 如果不为空,则栈中剩余的就是多余的'(' 的位置,遍历将所有多余位置变为‘*’
36          */
37         while (!locations.isEmpty()) {
38             Integer integer = locations.pop();
39             chars[integer] = '*';
40         }
41         /**
42          * 通过StringBuilder将char字符数组中的字符拼接起来(排除掉'*'),得到的就是符合条件的字符串
43          */
44         StringBuilder sb = new StringBuilder();
45         for (int i = 0; i < chars.length; i++) {
46             if (chars[i] == '*') {
47                 continue;
48             }
49             String c = String.valueOf(chars[i]);
50             sb.append(c);
51         }
52 
53         return sb.toString();
54     }

 

感悟:最重要的两点:栈 和 匹配

posted @ 2022-04-12 10:40  佛祖让我来巡山  阅读(34)  评论(0编辑  收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网