题意

https://vjudge.net/problem/CodeForces-1238D

如果一个字符串的每个字母,属于至少一个(长度大于1)的回文串,则称这个字符串为good。

一个长度为n的字符串s(只由字母A,B组成),问s的子串中有多少个good字符串

思路

发现只有XYX这种交错的串或者XX…X才可能是good串。

直接做比较难,我们考虑求不合法的串。

所以我们先正着遍历一遍字符串,找出XXXXY这种,即通过s[i]!=s[i-1]计算前面相同字符的个数,即为不合法串的个数(XY,XXY,XXXY,XXXXY都不合法)

再倒着遍历一遍,找出XYYYY这种,即通过s[i]!=s[i+1]计算后面相同字符的葛素,即为不合法串的个数(XY,XYY,XYYY,XYYYY)

但我们也可以发现,这样做会把XY这种减两遍,事实是正着算算成了XY,倒着算算成了YX,所以再遍历一遍,把XY这种交错的个数算出来。

长度为1的串肯定不合法,所以用总的串(n-1+1)*(n-1)/2 减去上面不合法的情况,再加上多减的XY。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int main()
{
std::ios::sync_with_stdio(false);
ll n;
cin>>n;
string s;
cin>>s;
ll ans=n*(n-1)/2,cnt=1;
for(int i=1;i<n;i++)//XXXXY
{
if(s[i]==s[i-1]) cnt++;
else ans-=cnt,cnt=1;
}
cnt=1;
for(int i=n-2;i>=0;i--)
{
if(s[i]==s[i+1]) cnt++;
else ans-=cnt,cnt=1;
}
for(int i=1;i<n;i++)
if(s[i]!=s[i-1])
ans++;
cout<<ans<<endl;
return 0;
}

  

最新文章

  1. C语言中的system函数参数及其作用
  2. http 301和302的区别
  3. Python面试题
  4. 怎样搭建PHP开发环境
  5. Go实现线程池
  6. sim卡中的汉字存储格式
  7. TextWatcher原因activity内存泄漏问题
  8. springboot 项目maven 打包错误
  9. Juicer模板引擎使用笔记
  10. Spring知识点回顾(07)事件发布和监听
  11. 超越村后端开发(2:新建models.py+xadmin的引入)
  12. 移动端 去除onclick点击事件出现的背景色框
  13. Apache Phoenix Flume集成 -- JsonEventSerializer改进
  14. 转:java内部类作用
  15. Android使用VideoView播放本地视频及网络视频Demo
  16. ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等)
  17. Sum Root to Leaf Numbers leetcode java
  18. 贝塞尔曲线.简单推导与用opengl实现动态画出。
  19. Python的第二次作业
  20. 关于谷歌浏览器62版本之后引用video.js不能自动播放的问题(Cross-origin plugin content from http://vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf must have a visible size larger than 400 x 300 pixels, or it will be blocked.)

热门文章

  1. 如何在 Chrome中导出、导入书签和密码
  2. How to: Apply Attributes to Entity Properties when Using Model First 如何:在ModelFirst时将属性应用于实体属性
  3. 一些实用的Django+HTML设置
  4. 网站如何免费升级到HTTPS?
  5. NestedScrollView、ScrollView 加载完自动滑动至底部问题的解决方案
  6. deducmsV5.7 在{dede:datalist}标签中runphp无效的解决办法
  7. 设计冲刺Design Sprint - 阅读记录
  8. [Go] golang定时器与redis结合
  9. 011.MongoDB性能监控
  10. Security+学习笔记