您的位置:首页 > 编程语言

2017年华为优招机试题_括号匹配_编程题

2017-07-31 14:02 302 查看

    括号匹配_编程题

给定一个字符串,里边可能包含"()"、"[]"、"{}"三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。 输出: 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;
}
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: