1、问题:
Java实现括号是否匹配(给定一串字符串看括号是否成对出现)
思路:
1.1、将字符串的每个字符进行遍历
1.2、如果发现是左括号,那么将该字符压入到栈中
1.3、如果是右括号,先去存储好的栈顶找到相应的值
1.4、若栈为空返回false,若匹配,pop该左括号,若不匹配也返回false
1.5、最后看存储栈中的做括号是否都匹配上了,也就是栈最后为空,返回true,否则返回false
2、代码
package com.liuy;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
/**
* Java实现括号是否匹配(给定一串字符串看括号是否成对出现)
*
*
1、将字符串的每个字符进行遍历
2、如果发现是左括号,那么将该字符压入到栈中
3、如果是右括号,先去存储好的栈顶找到相应的值
4、若栈为空返回false,若匹配,pop该左括号,若不匹配也返回false
5、最后看存储栈中的做括号是否都匹配上了,也就是栈最后为空,返回true,否则返回false
* @author Liuy
*
*/
public class TestStack {
static boolean isMatch(String s) {
Map<Character,Character> bracket= new HashMap<Character,Character>();
bracket.put(')', '(');
bracket.put(']', '[');
bracket.put('}', '{');
Stack stack = new Stack();
for(int i=0;i<s.length();i++)
{
Character temp = s.charAt(i);//先转换成字符
//是否为左括号
if(bracket.containsValue(temp))
{
stack.push(temp);
//是否为右括号
}else if(bracket.containsKey(temp)){
//如果栈为空,则没有括号
if(stack.isEmpty())
{
return false;
}
//若左右括号匹配
if(stack.peek() == bracket.get(temp))
{
return true;
}
else {
return false;
}
}
}
return stack.isEmpty()?true:false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(isMatch("(})}"));
System.out.println(isMatch("(){}[]"));
System.out.println(isMatch("00000"));
}
}