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;
}
相关文章推荐
- 华为机试题二括号的匹配
- 2017年华为Fx计划在线机试题(详解)
- 华为机试 - 判断if语句括号是否匹配
- 华为2017年大牛机试题—最长回文字符串
- 2017年华为实习编程题
- 华为机试练习---括号匹配问题
- [编程题]括号匹配问题
- OJ——华为编程题目:输入字符串括号是否匹配
- 华为笔试题--LISP括号匹配 解析及源码实现
- 华为机试—括号匹配
- 华为机试之括号匹配
- 【华为机试题】黑白棋子的最大匹配度
- 华为机试之括号匹配
- 华为2014机考题目_判断if括号匹配是否合法_堆栈_简单的方法- -
- 华为OJ:2199 判断输入字符串中的括号匹配
- 华为机试题三 关于通配符的匹配
- 华为机试—括号匹配判断[去多余括号]
- 一道验证花括号匹配的编程题
- 括号匹配--今日头条2017年实习生招聘笔试题
- 华为笔试题--LISP括号匹配 解析及源码实现