题目描述:
小红定义一个长度为奇数的字符串的“中值”为中间那个字符。例如"kou"的中值是'o'。
现在小红拿到了一个字符串,她想知道某个字符是多少个子串的中值。你能帮帮她吗?
输入描述:
输出描述:
一个整数,代表中值为chr的连续子串数量。
示例1
输入
4 b
abcb
输出
3
说明
有两个"b"字符串和一个"abc"字符串的中值都是'b'。
解题思路:
我们用 星星 代表 chr这个中间值字符,用圆圈代表其他字符,第一个星星,我们可以看出来左面最多是三个,右面可以是更多,但是根据题目要求,奇数串,那说明就要关于这个中间值对称,所以右面也是三个,算上 chr自己是一种,加起来第一个 星星 就是四种中间值情况,以此类推。
AC代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N = 1e5+10;
char s[N];
int main()
{
int n;
char c;
cin >> n >> c;
long long cnt = 0;
for(int i=1;i<=n;i++) {
cin >> s[i];
}
for(int i=1;i<=n;i++)
{
if(s[i] == c)
{
cnt = cnt + min(i,n-i+1);
}
}
cout << cnt;
return 0;
}
此题一定要注意long long 本人已经被坑好多次。。。。。。。。。。