import java.util.*;
class Solution {
public int solution(String s) {
StringBuilder sb = new StringBuilder(s);
int ans = 0;
for(int i = 0;i<sb.length();i++){
sb.append(sb.charAt(0));
sb.deleteCharAt(0);
if(check(sb.toString())) ++ans;
}
return ans;
}
private static boolean check(String s){
if(s.charAt(0) == ']' || s.charAt(0) == ')' || s.charAt(0) == '}') return false;
Stack<Character> stack = new Stack<>();
for(int i=0 ; i<s.length() ; i++){
char c = s.charAt(i);
if(c == ']' || c == ')' || c == '}'){
if(stack.isEmpty()) return false;
if(stack.peek() == '['){
if(c != ']') return false;
stack.pop();
}
else if(stack.peek() == '('){
if(c != ')') return false;
stack.pop();
}
else if(stack.peek() == '{'){
if(c != '}') return false;
stack.pop();
}
}else{
stack.push(c);
}
}
return stack.isEmpty();
}
}
import java.util.Stack;
public class Solution {
private boolean isCorrect(char[] str, int offset) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length; i++) {
char c = str[(offset + i) % str.length];
switch (c) {
case '(' -> stack.push(')');
case '{' -> stack.push('}');
case '[' -> stack.push(']');
case ')', '}', ']' -> {
if (stack.isEmpty()) return false;
if (stack.pop() != c) return false;
}
}
}
return stack.isEmpty();
}
public int solution(String s) {
char[] str = s.toCharArray();
int count = 0;
for (int offset = 0; offset < str.length; offset++) {
if (isCorrect(str, offset)) {
count++;
}
}
return count;
}
}