题目链接

题目

我们规定对一个字符串的shift操作如下:

shift(“ABCD”, 0) = “ABCD”

shift(“ABCD”, 1) = “BCDA”

shift(“ABCD”, 2) = “CDAB”

换言之, 我们把最左侧的N个字符剪切下来, 按序附加到了右侧。

给定一个长度为n的字符串,我们规定最多可以进行n次向左的循环shift操作。如果shift(string, x) = string (0<= x <n), 我们称其为一次匹配(match)。求在shift过程中出现匹配的次数。

输入

输入仅包括一个给定的字符串,只包含大小写字符。样例输入
byebyebye

输出

输出仅包括一行,即所求的匹配次数。样例输出
3

时间限制
C/C++语言:1000MS其它语言:3000MS
内存限制
C/C++语言:65536KB其它语言:589824KB

完整代码

暴力
运行结果:超时
ac40%

#include<bits/stdc++.h>
using namespace std;
string shift(string str, int n){    string res = ""; res = str.substr(n, str.length() - n) + str.substr(0, n);  return res;
}
int main(){    string str = "";  cin >> str;   int res = 0;   for(int i = 0; i < str.length(); ++i){  if(str == shift(str, i))         ++res;   }    cout << res;     return 0;
}

暴力优化

  • 如果数组中每个字符都相同,则直接输出长度
  • 移动时,移动的长度是总长度的因数时才移动
  • 结果:ac:60%,总是显示测试用例:zzzz时出错,但程序在输入:zzzzz,结果就是5啊!!!
#include<bits/stdc++.h>
using namespace std;
string shift(string str, int n){    string res = ""; res = str.substr(n, str.length() - n) + str.substr(0, n);  return res;
}
int main(){    string str = "";  cin >> str;   int  j = 1;while(j < str.length()){if(str[j] == str[j - 1])++j;elsebreak;}if(j == str.length()){cout << j;return 0;}int res = 0;   for(int i = 0; i < str.length(); ++i){  if(str.length() % (i + 1))continue;if(str == shift(str, i))         ++res;   }    cout << res;     return 0;
}

借助KMP算法
KMP

  • 相当于求字符串的周期,最终长度除以周期就是结果
  • 利用s.length() - next[s.length()]就是周期

ac了

#include<bits/stdc++.h>using namespace std;int GetNext(string s){vector<int> next(s.length() + 1);//注意和KMP的区别next[0] = -1;int k = -1, j = 0;while(j < s.length()){if(k == -1 || s[k] == s[j]){//KMP的next数组未优化形式++k;++j;next[j] = k;}else{k = next[k];}}return next[s.length()];
}int main(){string s;cin >> s;if(s.length() == 0){cout << 0;return 0;}int t = s.length() - ((GetNext(s)));if(s.length() % t == 0)cout << s.length() / t ;elsecout << 1;return 0;
}

String Shifting(今日头条2017秋招真题)相关推荐

  1. 头条校招(今日头条2017秋招真题)

    题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队.每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来.在选题之前,我们对题目进行了盲审,并定出 ...

  2. 头条校招(今日头条2017秋招真题)1——python解法

    题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队.每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来.在选题之前,我们对题目进行了盲审,并定出 ...

  3. 电话号码分身(小米2017秋招真题)

    电话号码分身(小米2017秋招真题) 题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替(&quo ...

  4. 方块消除游戏(完美世界2017秋招真题)

    方块消除游戏(完美世界2017秋招真题)题目描述 如下图,有10*10个不同颜色的方块,每个方块可能是红.绿.蓝.黄.紫5种颜色之一.当点击其中某一个方块时,如果它有相邻的同颜色方块,则将所有与此方块 ...

  5. 今日头条2018秋招编程题

    今日头条 2018秋招 Android方向 编程题 1.手串 作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串–每个串珠要么无色,要么涂了若干种颜色.为了使手串的色彩看起来不那么单调,金主 ...

  6. java号码分身_[算法] 电话号码分身 (小米2017 秋招真题)[JavaScript]

    题目描述 继MIUI8推出手机分身功能,MIUI计划推出一个电话号码分身得功能:首先将电话号码中的每个数字加上8取个位,然后使用对应得大写字母代替 ("ZERO", "O ...

  7. 和谐敏感词(百度2017秋招真题)

    题目: 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向.暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网 ...

  8. 敏感词(百度2017秋招真题)

    题目描述 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向.暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本 ...

  9. 树的高度(小米2017秋招真题)

    现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度. 输入 输入的第一行表示节点的个数n(1<=n<=1000,节点的编号为0到n-1)组成, ...

最新文章

  1. Thinkphp中import的几个用法详细介绍
  2. linux停止jar程序,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法
  3. 绿米空调伴侣接入iobroker_普通空调用它变成互联网智能空调,你觉得怎么样?...
  4. 深圳 | 鹏程实验室研究员招收访问学生
  5. Git使用出现git@github.com: Permission denied (publickey)
  6. 2013年国家计算机等级考试c语言考试真题,2013年3月计算机等级考试二级C语言真题及答案.doc...
  7. lbe android,LBE安全大师极速版
  8. M-02-10.[紫猫]Sqlite3数据库插件
  9. 【数学基础】线性方程组解情况整理
  10. Http状态405-方法不允许
  11. Excel快捷键:Ctrl+E的功能汇总
  12. library sort (图书馆排序)
  13. 如何综合掌握 DB2 和 Informix
  14. 数据分析中,文本分析远比数值型分析重要!(上)
  15. SAP-ABAP-OOALV进阶-子屏幕;各种方法示例;
  16. 数据库知识点整理(一)
  17. VMware--局域网访问电脑中VMware虚拟机
  18. linux编写学生选课系统
  19. ovo svm_反思我在OVO担任远程产品设计实习生的时间
  20. 欢迎入驻A5源码市场

热门文章

  1. 测试Risym 2.5A双路电机驱动模块:MX1919
  2. python多久可以入门_python自学要多久能学会
  3. linux ubuntu硬盘数据丢失【硬盘开机未挂载】
  4. 数据库恢复时出现诸如“设备激活错误
  5. 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝
  6. 环信的使用以及注意事项!
  7. 亲民地理38期-江西极顶武功山(上)_我是亲民_新浪博客
  8. 怎样学好高一数学,首先掌握这4种方法
  9. ARCH模型和GARCH模型
  10. ROS2与C++入门教程-在C++包里增加python支持