20. Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "()[]{}"
Output: true

Example 3:

Input: "(]"
Output: false

Example 4:

Input: "([)]"
Output: false

Example 5:

Input: "{[]}"

Output: true

大意是:给出一个括号字符串,判断是不是合法的

没什么思路,然后看了讨论里大佬的代码,真的很厉害,

思路:每一看到一个左括号就入栈一个匹配的右括号,如果来的不是左括号,那有有两种可能:

    情况一:来的是右括号,如果是合法的,必须要跟stack栈顶的符号一致;那栈其实也是有两种情况:

                栈情况一:栈为空——》不合法

                栈情况二:栈不为空,那么就要判断栈顶字符和来的字符作判断,一致———》合法,不一致——》不合法

    情况二:来的是空,

                 栈情况一:栈为空,——》合法;

                栈情况二:栈为空,——》不合法

知识点:

1.

public char[] toCharArray()
将String字符串转化为char型的字符数组

2.for循环,对数组遍历

for(char c:str.toCharArray()){}

3.在如果非空,而且栈顶字符等于来的字符时候,那应该是:只需要弹出栈顶,然后继续做后续判断,不需要返回值的

所以这一个操作可以在判断语句就做好,不用进入到判断条件里面

代码

class Solution {
    public boolean isValid(String s) {
        Stack stack = new Stack<Character>();
        for(Character c:s.toCharArray()){//这里很重要,之前是定义为char类型,但是因为stack.pop出来的是object类型,结果在判断条件里一致报类型不符合错误
            if(c=='(')
                stack.push(')');
            else if(c=='[')
                stack.push(']');
            else if(c=='{')
                stack.push('}');
            else if(stack.isEmpty()){
                return false;
            }else if(!stack.isEmpty()){
                if(stack.pop()!=c){
                    return false;
                }
            }
        }
        return stack.isEmpty();
        
    }
   
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用 Java 实现的解答: ```java import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; import java.util.Stack; public class ParenthesesChecker { public static void main(String[] args) throws IOException { // 读取输入文件名 Scanner scanner = new Scanner(System.in); System.out.print("Enter input file name: "); String inputFileName = scanner.nextLine(); // 读取输入文件 File inputFile = new File(inputFileName); Scanner fileScanner = new Scanner(inputFile); // 准备输出文件 String outputFileName = "output_a3.txt"; FileWriter fileWriter = new FileWriter(outputFileName); // 逐行读取表达式并检查 long startTime = System.currentTimeMillis(); while (fileScanner.hasNextLine()) { String expression = fileScanner.nextLine(); boolean isValid = checkParentheses(expression); fileWriter.write(expression + " - " + (isValid ? "valid" : "not valid") + "\n"); } long endTime = System.currentTimeMillis(); // 关闭文件和扫描器 fileWriter.close(); fileScanner.close(); // 输出执行时间 long executionTime = endTime - startTime; System.out.println("Total execution time: " + executionTime + " ms"); } private static boolean checkParentheses(String expression) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < expression.length(); i++) { char ch = expression.charAt(i); if (ch == '(' || ch == '{' || ch == '[') { stack.push(ch); } else if (ch == ')' || ch == '}' || ch == ']') { if (stack.isEmpty()) { return false; } char top = stack.pop(); if (ch == ')' && top != '(') { return false; } else if (ch == '}' && top != '{') { return false; } else if (ch == ']' && top != '[') { return false; } } } return stack.isEmpty(); } } ``` 以上程序中,我们通过 `Scanner` 类读取用户输入的输入文件名,然后使用 `File` 类和 `Scanner` 类读取输入文件中的表达式。逐行读取后,我们调用 `checkParentheses()` 方法检查表达式是否括号匹配。如果是,我们就在输出文件中写入 "valid",否则写入 "not valid"。 `checkParentheses()` 方法中,我们使用 `Stack` 类来模拟栈,逐个遍历表达式中的字符。如果遇到左括号,我们就将其入栈。如果遇到右括号,我们就将栈顶的元素出栈,并检查它与当前右括号是否匹配。如果不匹配,我们就返回 `false`。如果表达式遍历完毕后栈非空,说明有左括号未被匹配,我们也返回 `false`。 最后,我们输出执行时间,即程序开始执行到输出结果之间所经过的时间。 需要注意的是,为了方便起见,我们在程序中没有对文件输入输出进行异常处理。在实际开发中,我们应该使用 `try-catch` 语句来处理可能出现的异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值