目录
题目链接
一些话
流程
因为是判断字符串两边的字符情况,所以用两个指针指向字符串的两边,是一道双指针题目
双指针要考虑指针移动情况,本题指针只能一起移动,这样就只要考虑指针移动的条件:
i < j && ((s[i] == '1' && s[j] == '0') || (s[i] == '0' && s[j] == '1'))----------------(i是左指针,j是右指针)
根据题意,指针每次移动,即删去字符串左右两边的字符,此时字符串长度减二
套路
双指针:
同时访问字符串内的两个元素
双循环在外层写上左指针,慢指针的移动条件,内层写上右指针,快指针的移动条件
单循环用两个if各自控制1个指针移动
ac代码
#include <iostream>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
string s;
cin >> s;
int res = n;
for(int i = 0,j = n - 1;i < j && ((s[i] == '1' && s[j] == '0') || (s[i] == '0' && s[j] == '1'));i++,j--){
res-=2;
}
cout << res << endl;
}
return 0;
}