1. 程式人生 > >括號匹配 - 給定一串字元,不超過100個字元,可能包括括號、數字、字母、標點符號、空格,程式設計檢查這一串字元中的( ) ,[ ],{ }是否匹配。

括號匹配 - 給定一串字元,不超過100個字元,可能包括括號、數字、字母、標點符號、空格,程式設計檢查這一串字元中的( ) ,[ ],{ }是否匹配。

7-12 括號匹配 (15 分)
給定一串字元,不超過100個字元,可能包括括號、數字、字母、標點符號、空格,程式設計檢查這一串字元中的( ) ,[ ],{ }是否匹配。

輸入格式:
輸入在一行中給出一行字串,不超過100個字元,可能包括括號、數字、字母、標點符號、空格。

輸出格式:
如果括號配對,輸出yes,否則輸出no。

輸入樣例1:
sin(10+20)
輸出樣例1:
yes
輸入樣例2:
{[}]
輸出樣例2:
no

這個題提交是部分正確,我用Java的輸出和輸出樣例一樣。
用HashMap儲存符號的對應關係,用棧儲存符號,如果遇到對應的符號就出棧並把標誌flag置為1。
程式碼如下:

**import java.util.Stack;
import java.util.Scanner;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Stack s = new Stack();
HashMap<Character, Character> h = new HashMap<Character, Character>();
h.put(’(’, ‘)’);
h.put(’[’, ‘]’);
h.put(’{’, ‘}’);
String str = in.nextLine();
in.close();
int i = 0;
int flag = 0;
for (; i < str.length(); i++) {
if (str.charAt(i) == ‘(’ || str.charAt(i) == ‘[’
|| str.charAt(i) == ‘{’) {
s.push(str.charAt(i));
} else if ((str.charAt(i) == ‘)’ | str.charAt(i) == ‘]’ | str
.charAt(i) == ‘}’)) {
if (!s.empty()&&h.get(s.peek()) == str.charAt(i)) {
s.pop();
flag = 1;
}
else{
flag=0;
break;
}
}
}
if (flag == 1) {
System.out.println(“yes”);
}
if (flag == 0) {
System.out.println(“no”);
}

}

}**