IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> (栈)括号匹配问题 -> 正文阅读

[Java知识库](栈)括号匹配问题

括号匹配问题

  • 问题描述
  • 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
  • 输入格式
  • 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
  • 输出格式
  • 如果括号配对,输出yes,否则输出no。
  • 样例
  • 输入样例1:
    sin(10+20)
  • 输出样例1:
    yes
  • 输入样例2:
    {[}]
  • 输出样例2:
    no
  • 解题思路:(设置一个判断出错的boolean变量记录是否出错,可及时退出循环)
  • 1.如果面对的是左括号,则全部进栈.

  • 2.如果面对的不是括号字符(括号以外的字符),则直接跳过.

    1. 如果是右括号,则进入以下的步骤
      3.1. 如果栈是空的(遇到右括号),说明出错,直接退出
      3.2. 如果栈不空 ,且栈顶的元素与当前的括号匹配,则直接抛出栈顶元素
      3.3. 3.2的条件不满足,代表出错,则直接退出
  • 4.一直做上面的步骤除非上述步骤出错退出,直到遍历完输入的串

  • 结果的判断
  • 1.如果栈空(表示所有的括号都匹配完)并且记录错误的布尔类型变量没有改变值,表示匹配成功(即完美匹配)

  • 2.不满足1即非完美匹配

  • 正能量
  • 加油!每一位放弃华丽而选择包裹光华的人,必将在某天再次展露锋芒!
    👍

  • 代码实现如下(Java)
import java.util.Scanner;
import java.util.Stack;

public class Main {
    private static Stack<Character> st=new Stack<Character>();
    private static String shuru;
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        shuru=in.nextLine();
        if(is_judge()) System.out.println("yes");
        else System.out.println("no");
        in.close();
    }
    private static boolean is_judge(){
        boolean is_finish=true; int i;
        for(i=0;i<shuru.length();i++){
            char ch=shuru.charAt(i);
            if(ch=='('||ch=='['||ch=='{') st.push(ch);
            else if(ch==')'||ch==']'||ch=='}'){
                if(st.isEmpty()) is_finish=false;
                else if(ch==')'&&!st.isEmpty()){
                    if(st.peek()=='(') st.pop();
                    else is_finish=false;
                }
                else if(ch==']'&&!st.isEmpty()){
                    if(st.peek()=='[') st.pop();
                    else is_finish=false;
                }
                else if(ch=='}'&&!st.isEmpty()){
                    if(st.peek()=='{') st.pop();
                    else is_finish=false;
                }
            }
            if(!is_finish) break;
        }
        if(is_finish&&st.isEmpty()) return true;
        return false;
    }
}
  • 代码实现如下(C++)
#include<bits/stdc++.h>
using namespace std;
stack<char> st;
bool f=true;
int main(){
	string s;
	getline(cin,s);

	for(int i=0;i<s.size();i++){
		
		if(s[i]=='('||s[i]=='['||s[i]=='{'){
		   st.push(s[i]);
		 }
		else if(s[i]==')'||s[i]==']'||s[i]=='}'){
			
			if(st.empty()) f=false;
			else if(s[i]==')'&&!st.empty())
			{    
			   if(st.top()=='(')
				st.pop();
			   else
			    f=false;
			}
		   	else if(s[i]==']'&&!st.empty())
			{    
			   if(st.top()=='[')
				st.pop();
			   else
			    f=false;
			}
				else if(s[i]=='}'&&!st.empty())
			{    
			   if(st.top()=='{')
				st.pop();
			   else
			    f=false;
			}
		}
	}
	if(f&&st.empty()) cout<<"yes";
	else
	  cout<<"no";
	return 0;
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:40:04  更:2021-12-13 12:40:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:23:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码