题目链接:https://vjudge.net/problem/CodeForces-888C

划一条线,使得不论怎么划线,都会出现一个特定的字符,那么这条线最短要多长。

用字符间隔考虑。

先判断哪些字符出现了,然后统计每个不同字符的出现次数,出现一次的和出现多次的分开判断。

出现一次的找到它的位置,取max(当前位置 - 字符串开始位置 + 1,字符串末位位置 - 当前位置 + 1),

然后遍历所有出现一次的字符,得出max的最小值,并记录,dis1

出现多次的找到相邻两个相同字符的间隔,取最大间隔的间隔k,再得出第一个出现的相同字符和开头的间隔+1,最后一个出现的相同字符和字符串末尾的间隔+1,和k比较取最大dis2

答案就是min(dis1,dis2)。


 #include <cstring>
#include <iostream>
#include <cstdio> using namespace std; #define inf (1LL << 30) const int N = ;
char str[N];
int tmp[N];
int arr[N];
bool vis[]; int main(){ ios::sync_with_stdio(false);
cin.tie(); cin >> str;
int len = strlen(str) - ; for(int i = ; i <= len; i++){
arr[i] = str[i] - 'a' + ;
vis[arr[i]] = true; //哪些字符出现过
} int dis1 = inf;
int dis2 = inf;
int l = ;
for(int o = ; o < ; o++){ //'a'~'z'
if(!vis[o]) continue; l = ;
for(int i = ; i <= len; i++){
if(o == arr[i]) tmp[l++] = i;
}
--l;
//出现一次的
if(l == ){
int v = ;
v = max(v,max(tmp[l] - + ,len - tmp[] + ));
dis1 = min(dis1,v);
}
//出现多次的
else{
int v = ;
for(int i = ; i <= l; i++){
v = max(v,tmp[i] - tmp[i - ]);
} v = max(v,tmp[] - + ); //与字符串开头
v = max(v,len - tmp[l] + );//与字符串结尾 dis2 = min(dis2,v);
}
} cout << min(dis1,dis2) << endl; getchar();getchar(); return ;
}

最新文章

  1. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
  2. Win10 UI入门 圆形控件
  3. [moka同学笔记]window下.htacess文件 与linux下.htacess文件
  4. PInvoke和Marshal的姿势
  5. composer 272解决
  6. HDU 1517 (类巴什博奕) A Multiplication Game
  7. Codeforces 161 D. Distance in Tree (树dp)
  8. C# IO操作(三)文件编码
  9. start mysqld on Mac server
  10. CLR via C#可空值类型
  11. [置顶] Jquery发展
  12. UICollectionView 集合视图用法,自定义Cell
  13. prime算法求最小生成树(畅通工程再续)
  14. oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)
  15. (六) 编写vivid
  16. docker容器多服务(不推荐)
  17. SPI核软件调试结果
  18. Linux中/etc/resolv.conf文件简析
  19. Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
  20. (使用通过混淆+自己第三方保留成功混淆)AndroidStudio 混淆打包

热门文章

  1. nginx配置文件解释
  2. Apache的代理服务器的配置 (正向代理 ,反向代理,轮询调度)
  3. otl odbc小计
  4. Ubuntu 修改apt-get源为阿里源
  5. csv文件处理
  6. How to sort HashSet in Java
  7. MODBUS 数据格式相关记录
  8. DDR3(1):IP核调取
  9. opencv imshow plt imshow
  10. ABP 使用cache缓存