

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Thực chất bài toán này chính là bài toán tìm xem có bao nhiêu dấu ngoặc đóng không đúng chỗ. Biến ans trong hàm solve() dùng để đếm xem cần bao nhiêu dấu ngoặc đóng nữa để tạo ra dãy dấu ngoặc hợp lệ. Nếu gặp một dấu "(" thì nghĩa là ta cộng thêm 1 vào biến ans (nghĩa là cần thêm 1 dấu ")" nữa mới tạo được dãy con hợp lệ), ngược lại, gặp dấu ")" sẽ trừ đi 1 (do đã đóng đc 1 cặp ngoặc). Nếu biến ans mà bé hơn 0, nghĩa là tồn tại dấu ngoặc đóng không được đặt đúng chỗ thì ta sẽ cập nhật biến res thành min(res, ans) do ta cần đếm xem có bao nhiêu dấu ngoặc đóng không hợp lệ. Nếu ans càng bé thì càng có nhiều dãy ngoặc không hợp lệ.
Cuối cùng, ta in ra màn hình kết quả chính là |res| (giá trị tuyệt đối của res) do số dấu ngoặc cần phải là số tự nhiên. Nếu theo như thuật toán trên thì thậm chí ta còn chẳng cần n.
Code:
#include<bits/stdc++.h>
using namespace std;
int solve(string s){
int ans=0,res=0;
for(char k:s){
if(k=='(')++ans;
else --ans;
res=min(res,ans);
}
return abs(res);
}
signed main(){
int t;cin>>t;
while(t--){
string n="useless",s;cin>>n>>s;
cout<<solve(s)<<'\n';
}
}Hãy giúp mọi người biết câu trả lời này thế nào?

Bảng tin
1
113
0
Bạn ơi cho mình hỏi phần char k:s là gì vậy bạn
25
684
11
là duyệt qua mọi phần tử k trong chuỗi s á, nó cx giống như for(int i=0;i<n;++i) thì lúc này k sẽ là s[i] nếu s="hello" thì k sẽ lần lượt là {'h','e','l','l','o'}, kiểu v á
1
113
0
Cảm ơn bạn nhé:D
1
113
0
Bạn giúp mình câu này được không? https://hoidap247.com/cau-hoi/7288748