题目链接
一些话
流程
因为是判断字符串两边的字符情况,所以用两个指针指向字符串的两边,是一道双指针题目
双指针要考虑指针移动情况,本题指针只能一起移动,这样就只要考虑指针移动的条件:
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; }