文字列の場合、このアルゴリズムは、それが有効な文字列のブラケットであるかどうかを判断するために設計。
文字列とその長さA nを、それが有効な文字列のブラケットであるか否かを示すブール値への復帰を考えます。
試験サンプル:
「(()())」、6
戻り値:真
試験サンプル:
「()()()」、7
戻り値:偽
試験サンプル:
"()(()()"、7
戻り値:偽
import java.util.*;
//用栈实现
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
Stack<Character> s = new Stack<>();
for(int i = 0;i < n;i++){//循环取括号
char ch = A.charAt(i);
//左括号入栈
if(ch == '(' || ch == '{' || ch== '['){
s.push(ch);
}
//右括号为空(左比右多)不空(匹配)
else if(ch == ')' || ch == '}' || ch == ']'){
if(!s.isEmpty()){
char ch1 = s.peek();//拿到栈顶元素
if((ch1=='(' && ch==')')||(ch1=='{' && ch=='}')||(ch1=='[' && ch==']')){
s.pop();//匹配出栈
}
else{
return false;
}
}
else{
return false;
}
}
else{
return false;
}
}
if(s.isEmpty()){
return true;
}
return false;
}
}
唯一のブラケット
public boolean fun(String s) {
if(s.length()%2==1) {
return false;
}
int count=0;
for (char c:s.toCharArray()) {
if(c=='(') {
count++;
}else {
count--;
}
}
return count==0;
}