[Java]利用栈判断括号是否完整配对
利用栈实现判断字符串中的括号是否都是配对的。
主要算法是依次读取字符串中的每一个字符,如果是左括号则将左括号压入栈中,如果是右括号则从栈中弹出最上面的字符,若两者不是同种括号或栈内已经没有字符就返回false,循环完成后返回true。
package com.example; /**
* Created by XiaFF on 2014/11/18.
*
*/
public class Parentheses {
public static void main(String[] args){
String s="[()]{}{[()[]()]()}";
System.out.println(isComplete(s));
} public static boolean isComplete(String s){
Stack<String> left=new Stack<String>();
while (!s.isEmpty()){
//取字符串首字母
String character=s.substring(0,1);
//剩余的字符串
s=s.substring(1);
if(character.equals("{")||character.equals("[")||character.equals("(")){
//如果是左括号,则压入栈
left.push(character);
}else if(character.equals(")")||character.equals("]")||character.equals("}")){
//首先检查栈是否为空
if(left.isEmpty())
return false;
//弹出最后的左括号
String leftChar=left.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 left.isEmpty();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
[Java]利用栈判断括号是否完整配对的更多相关文章
- 利用栈实现括号匹配(python语言)
原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...
- Python 用栈判断括号匹配
#!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...
- java实现的判断括号是否成对的代码,()[]{}都可以
本来想找找现成的,去,都写的好复杂.自己写一个吧.挺有成就感.哈哈 package com.test.jiexi; import java.util.Stack; public class Check ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- 利用栈实现字符串中三种括号的匹配问题c++语言实现
编写一个算法,检查一个程序中的花括号,方括号和圆括号是否配对,若能够全部配对则返回1,否则返回0. Head.h: #ifndef HEAD_H_INCLUDED #define HEAD_H_INC ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- Valid Parentheses有效括号匹配。利用栈。
问题描述:给定一个字符串,其中只包含字符‘{’, '}', '[', ']', '(', ')'确定如果输入字符串是有效的.括号必须以正确的顺序排列,“()”和“()[]{ ...
- Java 技术栈
JAVA是一个面向对象的编程语言,由SUN公司的程序员所开发.它不仅吸收了C++的各种优点,而且还撇弃了C++中难以理解的概念,如多继承.指针等:因此JAVA语言具有功能强大且简单易用两个特征, JA ...
- Java 技术栈中间件优雅停机方案设计与实现全景图
欢迎关注公众号:bin的技术小屋,阅读公众号原文 本系列 Netty 源码解析文章基于 4.1.56.Final 版本 本文概要 在上篇文章 我为 Netty 贡献源码 | 且看 Netty 如何应对 ...
随机推荐
- android入门——数据存储
首先是SharedPreferences 用户偏好 package com.example.wkp.aboutdata; import android.content.Intent; import a ...
- js中跳转
<li><a href="javascript:recordRescSifting('+subject.subId+');">'+subject.subNa ...
- Ksoap 使用简介
转:http://www.open-open.com/bbs/view/1320111271749?sort=newest WebService 是一种基于SOAP协议的远程调用标准.通过WebSer ...
- iMac Termanel命令まとめ
1.mac环境下命令的使用ls -l -a 列出指定目录下文件 -l 显示文件的详细信息 -a 显示目录下所有文件(包括隐藏文件) -d ...
- QQ在线咨询状态显示不出来怎么办?http://bizapp.qq.com/webpres.htm
- Webpack 从0开始
Webpack Demos https://github.com/ruanyf/webpack-demos Docs https://webpack.github.io/docs/?utm_sourc ...
- 限制Inactive物料录入BOM
应用 Oracle Bill Of Materiel 层 Level Function 函数名 Funcgtion Name CUX_BOMFDBOM 表单名 Form Name CUXBOMFD ...
- 接口返回json
use Mojolicious::Lite; use JSON qw/encode_json decode_json/; # /foo?user=sri get '/api' => sub { ...
- 使用QueueUserWorkerItem实现的线程池封装
此线程池所依赖的线程类,请参看<一个Windows C++的线程类实现>: http://blog.csdn.net/huyiyang2010/archive/2010/08/10/580 ...
- [LeetCode][Python]Roman to Integer
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/roman-t ...