利用栈实现判断字符串中的括号是否都是配对的

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 05:18   316   0

题目:输入一串字符串,编写算法判断字符串中的括号是否匹配,如果匹配,输出true,否则输出false。

输入:一串字符串

输出:判断结果

java

/*利用栈实现判断字符串中的括号是否都是配对的
 *依次让左括号进栈,若在扫描的过程中出现配对的右括号,则将相应的左括号出栈
 *最终若栈为空则说明是配对的,反之则不是
 **/

package example;

import java.util.Scanner;
import java.util.Stack;

public class Parenthesses {

 public static void main(String[] args) {
  System.out.print("请输入字符串:    ");
  Scanner scan = new Scanner(System.in);
  String str = scan.next();
  System.out.print("是否配对:        ");
  if (isComplete(str))
   System.out.println("是");
  else
   System.out.println("否");

 }

 public static boolean isComplete(String s) {
  Stack<String> stack = new Stack<String>();
  while (!s.isEmpty()) {
   String character = s.substring(0, 1); // 取字符串首字母
   s = s.substring(1); // 剩余的字符串
   if (character.equals("{") || character.equals("[") || character.equals("(")) {
    stack.push(character); // 左括号进栈
   }
   if (character.equals(")") || character.equals("]") || character.equals("}")) {
    if (stack.isEmpty()) // 首先检查栈是否为空
     return false;
    String leftChar = stack.pop(); // 左括号出栈
    if (character.equals(")")) { // 检查左右括号是否匹配
     if (!leftChar.equals("("))
      return false;
    } else if (character.equals("]")) {
     if (!leftChar.equals("["))
      return false;
    } else if (character.equals("}")) {
     if (!leftChar.equals("{"))
      return false;
    }
   }
  }
  return stack.isEmpty();

 }

}

思路来源于网络。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP