给定一个字符串str,判断是不是整体有效的括号字符串(整体有效:即存在一种括号匹配方案,使每个括号字符均能找到对应的反向括号,且字符串中不包含非括号字符)。
该题属于简单题。但是提交多次,还是考虑不够周全。
- 第一个代码块提交,出现超时。
原因是for(;i<str.toCharArray().length;i++)for循环中使用str.toCharArray();每访问一个字符就转一次,增加了时间复杂度。 - 使用数组char[] arr=str.toCharArray();超时问题解决,但是通过率为86.96%。没有考虑到的情况是“(()”需要在字符串遍历结束时,判断栈是否为空。“())”此种情况时,使用的break退出for循环,但是for后面的代码会被执行,导致错误,因此此时使用return代替break。
- 此外,使用数组char[] arr空间复杂度不是O(1),因此直接使用str.charAt(i)直接访问字符串中的字符,正确通过代码如模块2。
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in =new Scanner(System.in);
String str=in.nextLine();
Stack<Character>stack=new Stack<>();
int i=0;
for(;i<str.toCharArray()