字符串水题(substr的使用+简单优化)
2017-04-27 21:44
323 查看
问题 H: 字符串最小表示
时间限制: 1 Sec 内存限制: 32 MB提交: 7 解决: 5
[提交][状态][讨论版]
题目描述
把一个长为len的字符串围成一个圈,然后以任意一个字符作为起点,都会产生一个长为len的字符串,字符串的最小表示就是所有字符串中字典序最小的那个。例如字符串alabala,将它围成一个圈后,根据上面的规则会形成以下新的字符串:
labalaa
abalaal
balaala
alaalab
laalaba
aalabal
在这所有7个字符串中,字典序最小的是aalabal,它的第一个字母在原字符串中的位置是6。(位置从0开始算)
现在给定你一个字符串,请你找出其最小表示的第一个字母在原字符串中的位置。如果字符串最小表示有多个,那么输出第一个字母在原字符串中位置最小的。
输入
输入的第一行是一个整数t,表示有t组测试数据。接下来t行,每行先输入一个整数l(5<=l<=100000),表示原字符串的长度,然后输入一个字符串,表示原字符串。字符串中只包含小写字母。
输出
对于每组输入,输出原字符串最小表示的第一个字母在原字符串中的位置。样例输入
2 6 baabaa 7 alabala
样例输出
1 6
提示
分析:直接模拟的话会时间超限,所以先选出字符串中字典序最小的那个字符,然后不是这个字符开头的就直接跳过,优化一下就好了#include <bits/stdc++.h> using namespace std; int main() { int t; cin>>t; int n; string a; int record; while(t--) { string c="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"; cin>>n>>a; char MIN='z'; int l=a.length(); for(int i=0; i<l; i++) { MIN=min(MIN,a[i]); } for(int i=0; i<l; i++) { if(a[i]==MIN) { string b=a.substr(i,n)+a.substr(0,i); if(c>b) { c=b; record=i; } 4000 } } cout<<record<<endl; } return 0; }
相关文章推荐
- PHP mb_strcut 和 mb_substr 字符串截取的简单使用
- python字符串处理简单优化
- 优化防火墙得力助手ipset介绍及简单使用方法
- 解析使用substr截取UTF-8中文字符串出现乱码的问题
- php性能优化:使用 isset()判断字符串长度速度比strlen()更快
- js字符串截取函数substr substring slice使用对比
- uva 10878 - Decode the tape 字符串水题 找到规律就简单了
- python中使用状态机的简单例子---截取'/x00'之前的字符串
- ORACLE dblink数据库连接 使用简单字符串方式
- java 使用简单的demo实例告诉你优化算法的强大
- 简单使用JSON,通过JSON 字符串来创建对象(二)
- asp中字符串转化为实体类的方法(优化篇,简单优化)
- 动态传入的逗号连接的字符串,分散成多条记录(Oracle 10g 使用REGEXP_SUBSTR 分拆字符串)
- 设计模式(1)-使用简单工厂优化代码(转载)
- LISP 简单的数据库 3.8 使用宏优化Where语句
- [ASP.NET2.0]Repeater C# 分页用法的效率及简单优化(不使用存储过程)
- oracle 10g 使用REGEXP_SUBSTR 分拆字符串
- oracle字符串连接和时间格式处理(附加Calendar简单使用)
- 前端性能优化:使用Array.prototype.join代替字符串连接
- 淘宝的新Sprite方法——使用Img Sprite技术对按钮加载顺序优化的简单研究