String Shifting(今日头条2017秋招真题)
题目链接
题目
我们规定对一个字符串的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秋招真题)相关推荐
- 头条校招(今日头条2017秋招真题)
题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队.每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来.在选题之前,我们对题目进行了盲审,并定出 ...
- 头条校招(今日头条2017秋招真题)1——python解法
题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队.每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来.在选题之前,我们对题目进行了盲审,并定出 ...
- 电话号码分身(小米2017秋招真题)
电话号码分身(小米2017秋招真题) 题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替(&quo ...
- 方块消除游戏(完美世界2017秋招真题)
方块消除游戏(完美世界2017秋招真题)题目描述 如下图,有10*10个不同颜色的方块,每个方块可能是红.绿.蓝.黄.紫5种颜色之一.当点击其中某一个方块时,如果它有相邻的同颜色方块,则将所有与此方块 ...
- 今日头条2018秋招编程题
今日头条 2018秋招 Android方向 编程题 1.手串 作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串–每个串珠要么无色,要么涂了若干种颜色.为了使手串的色彩看起来不那么单调,金主 ...
- java号码分身_[算法] 电话号码分身 (小米2017 秋招真题)[JavaScript]
题目描述 继MIUI8推出手机分身功能,MIUI计划推出一个电话号码分身得功能:首先将电话号码中的每个数字加上8取个位,然后使用对应得大写字母代替 ("ZERO", "O ...
- 和谐敏感词(百度2017秋招真题)
题目: 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向.暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网 ...
- 敏感词(百度2017秋招真题)
题目描述 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向.暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本 ...
- 树的高度(小米2017秋招真题)
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度. 输入 输入的第一行表示节点的个数n(1<=n<=1000,节点的编号为0到n-1)组成, ...
最新文章
- Thinkphp中import的几个用法详细介绍
- linux停止jar程序,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法
- 绿米空调伴侣接入iobroker_普通空调用它变成互联网智能空调,你觉得怎么样?...
- 深圳 | 鹏程实验室研究员招收访问学生
- Git使用出现git@github.com: Permission denied (publickey)
- 2013年国家计算机等级考试c语言考试真题,2013年3月计算机等级考试二级C语言真题及答案.doc...
- lbe android,LBE安全大师极速版
- M-02-10.[紫猫]Sqlite3数据库插件
- 【数学基础】线性方程组解情况整理
- Http状态405-方法不允许
- Excel快捷键:Ctrl+E的功能汇总
- library sort (图书馆排序)
- 如何综合掌握 DB2 和 Informix
- 数据分析中,文本分析远比数值型分析重要!(上)
- SAP-ABAP-OOALV进阶-子屏幕;各种方法示例;
- 数据库知识点整理(一)
- VMware--局域网访问电脑中VMware虚拟机
- linux编写学生选课系统
- ovo svm_反思我在OVO担任远程产品设计实习生的时间
- 欢迎入驻A5源码市场
热门文章
- 测试Risym 2.5A双路电机驱动模块:MX1919
- python多久可以入门_python自学要多久能学会
- linux ubuntu硬盘数据丢失【硬盘开机未挂载】
- 数据库恢复时出现诸如“设备激活错误
- 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝
- 环信的使用以及注意事项!
- 亲民地理38期-江西极顶武功山(上)_我是亲民_新浪博客
- 怎样学好高一数学,首先掌握这4种方法
- ARCH模型和GARCH模型
- ROS2与C++入门教程-在C++包里增加python支持