博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
K-Dominant Character CodeForces - 888C
阅读量:5352 次
发布时间:2019-06-15

本文共 1724 字,大约阅读时间需要 5 分钟。

 

题目链接:

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

用字符间隔考虑。

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

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

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

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

答案就是min(dis1,dis2)。


 

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 #define inf (1LL << 30) 8 9 const int N = 100010;10 char str[N];11 int tmp[N];12 int arr[N];13 bool vis[30];14 15 int main(){16 17 ios::sync_with_stdio(false);18 cin.tie(0);19 20 cin >> str;21 int len = strlen(str) - 1;22 23 for(int i = 0; i <= len; i++){24 arr[i] = str[i] - 'a' + 1;25 vis[arr[i]] = true; //哪些字符出现过26 }27 28 29 int dis1 = inf;30 int dis2 = inf;31 int l = 0;32 for(int o = 0; o < 30; o++){ //'a'~'z'33 if(!vis[o]) continue;34 35 l = 0;36 for(int i = 0; i <= len; i++){37 if(o == arr[i]) tmp[l++] = i;38 }39 --l;40 //出现一次的41 if(l == 0){42 int v = 0;43 v = max(v,max(tmp[l] - 0 + 1,len - tmp[0] + 1));44 dis1 = min(dis1,v);45 }46 //出现多次的47 else{48 int v = 0;49 for(int i = 1; i <= l; i++){50 v = max(v,tmp[i] - tmp[i - 1]);51 }52 53 54 v = max(v,tmp[0] - 0 + 1); //与字符串开头55 v = max(v,len - tmp[l] + 1);//与字符串结尾56 57 dis2 = min(dis2,v);58 } 59 }60 61 62 cout << min(dis1,dis2) << endl;63 64 getchar();getchar();65 66 return 0;67 }

 

 

转载于:https://www.cnblogs.com/SSummerZzz/p/11235003.html

你可能感兴趣的文章
信息浏览器从Android的浏览器中传递cookie数据到App中信息浏览器
查看>>
客户端连接linux虚拟机集群报错
查看>>
linux下部署一个JavaEE项目的简单步骤
查看>>
hash储存机制
查看>>
[Android学习系列16]Android把php输出的json加载到listview
查看>>
20145205 《信息安全系统设计基础》第14周学习总结
查看>>
6)添加一个窗口的图标
查看>>
POJ - 1422 Air Raid 二分图最大匹配
查看>>
Road Map
查看>>
正则替换中的一个Bug
查看>>
HI3531uboot开机画面 分类: arm-linux-Ubunt...
查看>>
制作U盘启动CDLinux 分类: 生活百科 ...
查看>>
strcpy函数里的小九九
查看>>
搭建ssm过程中遇到的问题集
查看>>
OpenLayers绘制图形
查看>>
tp5集合h5 wap和公众号支付
查看>>
Flutter学习笔记(一)
查看>>
iOS10 国行iPhone联网权限问题处理
查看>>
洛谷 P1991 无线通讯网
查看>>
[HIHO1184]连通性二·边的双连通分量(双连通分量)
查看>>