栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

括号检查 517 java 题解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

括号检查 517 java 题解

题目描述:

我们知道,编程中表达式常常只能使用小括号来改变运算的先后次序,并且没有其他括号可以使用。比如一元二次方程求根的表达式:
  -b+sqrt(b*b-4*a*c)/(2*a)
  再比如求用海伦公式求三角形的面积:
  ((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c)*(a+b+c)/2
  如果剥离出上述表达式的字母,只保留括号,则它们分别为:
  ()()
  (())(())(())()
  括号添加的规则是:
  1、总体上看,左右括号必须数量一样多。
  2、从左到右依次看,任何时候右括号不能多于左括号
  并不总是一眼能看出括号的添加是否正确。所以请你编写程序检查括号添加是否正确。

输入格式

  一行只由左右括号构成的字符串。

输出格式

  括号添加正确,则输出yes,否则输出no

样例输入

()()

样例输出

yes

数据规模和约定

  括号串长度不会超过256个,则字符串不为空

解题思路:

出现括号不匹配有两种情况:①左括号多余 ②右括号多余,可以只要遇见左括号就进栈,右括号就出栈,①:扫描完后栈不空,仍留有左括号。②出栈时栈已经为空。如果上两种情况都不满足,即说明括号都匹配。

java代码:
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = br.readLine();
		Stack st = new Stack<>();
		boolean flag = true;
		for(int i = 0; i < s.length();i++) {
			char temp = s.charAt(i);
			if(temp == '(') {
				st.push(temp);
			}else {
				if(st.size() > 0) {
					st.pop();
				}else {
					flag = false;
					System.out.println("no");
					break;
				}
			}
		}
		if(st.size() == 0 && flag) {
			System.out.println("yes");
		}else if(st.size() != 0 && flag){
			System.out.println("no");
		}
	}
}
提交截图:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号