括号匹配_编程题
给定一个字符串,里边可能包含"()"、"[]"、"{}"三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。 输出: true:若括号成对出现且嵌套关系正确,或该字符串中无括号字符; false:若未正确使用括号字符。 实现时无需考虑非法输入。
输入描述:
输入为:
字符串
例子:(1+2)/(0.5+1)
输出描述:
输出:true | false
例子:true
示例1
输入
(1+2)/(0.5+1)
输出
True
Java方法1:
import java.util.Scanner;
import java.util.Stack;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
while (sc.hasNext())
{
/** 利用栈先进后出(FILO)特性*/
Stack<Character> stack = new Stack<>();
String str = sc.nextLine();
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length; i++)
{
if (cs[i] == '(' || cs[i] == '{' || cs[i] == '[')
{
stack.push(cs[i]);
}
else
{
if (cs[i] == ')')
{
if (stack.peek() == '(')
{
stack.pop();
}
}
if (cs[i] == '}')
{
if (stack.peek() == '{')
{
stack.pop();
}
}
if (cs[i] == ']')
{
if (stack.peek() == '[')
{
stack.pop();
}
}
}
}
if(stack.isEmpty()){
System.out.println("true");
}
else{
System.out.println("false");
}
}
}
}
Java方法2
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String str=sc.nextLine();
countBrackets(str);
}
}
/** 判断该字符串括号是否成对出现,且嵌套关系正确*/
public static void countBrackets(String str){
int Big=0,Mid=0,Min=0;
char[] charArr = str.toCharArray();
for(int i=0;i<str.length();i++){
if(charArr[i]=='{'){
Big+=1;
}
if(charArr[i]=='['){
Mid+=1;
}
if(charArr[i]=='('){
Min+=1;
}
if(charArr[i]=='}'){
Big-=1;
}
if(charArr[i]==']'){
Mid-=1;
}
if(charArr[i]==')'){
Min-=1;
}
if(Big<0||Mid<0||Min<0){
System.out.println("false");
return ;
}
}
if(Big!=0||Mid!=0||Min!=0){
System.out.println("false");
}else{
System.out.println("true");
}
}
}
C++方法1
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
stack <char> sta;
string s;
cin>>s;
for(int i=0;i<s.length();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
sta.push(s[i]);
else
{
if(s[i]==')')
{
if(sta.top()=='(')
sta.pop();
}
if(s[i]=='}')
{
if(sta.top()=='{')
sta.pop();
}
if(s[i]==']')
{
if(sta.top()=='[')
sta.pop();
}
}
}
if(sta.empty())
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}