java中统计括号配对_括号配对问题(C语言或JAVA语言代码)
描述
現(xiàn)在,有一行括號序列,請你檢查這行括號是否配對。
輸入
第一行輸入一個數(shù)N(0
"]", "(", ")" 四種字符
輸出
每組輸入數(shù)據(jù)的輸出占一行,如果該字符串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
樣例輸入
3
[(])
(])
([[]()])
樣例輸出
No
No
Yes
解題思路:
由于用棧來實(shí)現(xiàn)要復(fù)雜得多,這里可以訪問“棧”內(nèi)元素,“棧”頂是右括號而非用棧表示的左括號,括號序列中的字符逐個入“棧”,發(fā)現(xiàn)緊挨著“棧頂”的一個元素為']'或')'時,迅速匹配“已配對括號都出棧后”再往前數(shù)一個位置的'['或'('。
注意事項(xiàng):
串長小于10000,注意邊界,當(dāng)所有的括號都匹配以后,“棧頂指針”指向其第一個位置。
參考代碼:
C語言描述:#include?
int?main(){
char?s[10001],x[10001];
int?t,?a,?c;
scanf("%d",?&a);
while(a--)?{
scanf("%s",s);
t?=?c?=?0;
while?(?c?
if(?t?>?1?&&?(x[t-1]?==?']'?&&?x[t-2]?==?'['?||?x[t-1]?==?')'?&&?x[t-2]?==?'(')?)
t?-=?2;
if(t?==?1)?printf("Yes\n");
else?printf("No\n");
}
return?0;
}
JAVA語言描述:import?java.util.*;
class?Main?{
public?static?void?main(String[]?args)?throws?Exception?{
Scanner?cin?=?new?Scanner(System.in);
int?a?=?cin.nextInt();
while?(0?
String?s;
List?vec?=?new?ArrayList();
s?=?cin.next();
vec.add("?");
for?(int?i?=?0;?i?
vec.add(""?+?s.charAt(i));
int?b?=?vec.size();
if?(vec.get(b-1).charAt(0)-1?==?vec.get(b-2).charAt(0)?||
vec.get(b-1).charAt(0)-2?==?vec.get(b-2).charAt(0)){
vec.remove(b-1);
vec.remove(b-2);
}
}
if?(1?==?vec.size())?System.out.println("Yes");
else?System.out.println("No");
}
}
}
總結(jié)
以上是生活随笔為你收集整理的java中统计括号配对_括号配对问题(C语言或JAVA语言代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大家谨慎操作!苹果关闭iOS 15.1.
- 下一篇: Intel 12代酷睿i5-12400F