(C卷,100分)- 括号匹配(Java & JS & Python)

题目描述

给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。
若括号成对出现且嵌套关系正确,或该字符串中无括号字符,输出:true;
若未正确使用括号字符,输出:false。
实现时,无需考虑非法输入。

输入描述

输出描述

用例

输入 (1+2)/(0.5+1)
输出 true
说明

题目解析

的变种题,解题思路相同。

JavaScript算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  console.log(getResult(line));
});

function getResult(line) {
  const regExp = /[^()[]{}]/g;

  // 去除非括号字符
  line = line.replace(regExp, "");

  const map = {
    ")": "(",
    "]": "[",
    "}": "{",
  };

  const stack = [];

  for (let c of line) {
    if (stack.length && map[c]) {
      if (stack.at(-1) === map[c]) {
        stack.pop();
        continue;
      } else {
        return false;
      }
    }

    stack.push(c);
  }

  return stack.length == 0;
}

Java算法源码

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
  // 输入获取
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String s = sc.nextLine();

    System.out.println(getResult(s));
  }

  // 算法入口
  public static boolean getResult(String s) {
    // 去除非括号字符
    s = s.replaceAll("[^\(\)\[\]\{\}]", "");

    HashMap<Character, Character> map = new HashMap<>();
    map.put(')', '(');
    map.put(']', '[');
    map.put('}', '{');

    LinkedList<Character> stack = new LinkedList<>();

    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);

      if (stack.size() > 0 && map.containsKey(c)) {
        if (stack.getLast() == map.get(c)) {
          stack.removeLast();
          continue;
        } else {
          return false;
        }
      }

      stack.add(c);
    }

    return stack.size() == 0;
  }
}

Python算法源码

import re

# 输入获取
s = input()


# 算法入口
def getResult(s):
    # 去除非括号字符
    s = re.sub(r"[^()[]{}]", "", s)

    map = {
        ")": "(",
        "]": "[",
        "}": "{"
    }

    stack = []

    for i in range(len(s)):
        c = s[i]

        if len(stack) > 0 and map.get(c) is not None:
            if stack[-1] == map[c]:
                stack.pop()
                continue
            else:
                return False

        stack.append(c)

    return len(stack) == 0


# 算法调用
print(str(getResult(s)).lower())

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?