Balanced Substring
题目链接:luogu CF1569A
题目大意
给你一个字符,只由 a,b 组成,问你是否有这么一个子串使得 ab 的个数相同。
输出任意一个即可。
思路1
由于字符串长度很小,直接暴力计算即可。
代码1
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int t, n;
char c[51];
bool yes;
int main() {
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
scanf("%s", c + 1);
yes = 0;
for (int i = 1; i <= n; i++) {
int numa = 0, numb = 0;
for (int j = i; j <= n; j++) {
if (c[j] == 'a') numa++;
else numb++;
if (numa == numb) {
yes = 1;
printf("%d %d\n", i, j);
break;
}
}
if (yes) break;
}
if (!yes) printf("-1 -1\n");
}
return 0;
}
思路2
比完赛来写博客的时候才发现完全不用那么麻烦。
因为只用输出任意一个,那它要有就当且仅当会出现两个不同的字符,那你每个字符各选一个即可。
也就是找是否存在一个位置和它前面的位置不是同一个字符。
(或者你只要判是否两个字符都有即可)
代码2
#include<map>
#include<set>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int T, n;
char s[51];
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
scanf("%s", s + 1);
bool yes = 0;
for (int i = 2; i <= n; i++)
if (s[i] != s[i - 1]) {
printf("%d %d\n", i - 1, i);
yes = 1;
break;
}
if (!yes) printf("-1 -1\n");
}
return 0;
}