【发布时间】:2013-02-06 19:31:41
【问题描述】:
我正在尝试解决this problem in spoj
我需要找到给定字符串的旋转次数,使其在所有旋转中按字典顺序最小。
例如:
原文:ama
第一次轮换:maa
第二次轮换:aam 这是字典顺序上最小的轮换,所以答案是 2。
这是我的代码:
string s,tmp;
char ss[100002];
scanf("%s",ss);
s=ss;
tmp=s;
int i,len=s.size(),ans=0,t=0;
for(i=0;i<len;i++)
{
string x=s.substr(i,len-i)+s.substr(0,i);
if(x<tmp)
{
tmp=x;
t=ans;
}
ans++;
}
cout<<t<<endl;
我收到此解决方案的“超出时间限制”。我不明白可以进行哪些优化。如何提高解决方案的速度?
【问题讨论】:
-
请不要使用“no.”和“plz”等地区缩写。 StackOverflow 拥有全球观众,其中许多人不是以英语为母语的人。另外,什么是TLE?
-
“其他”优化?除了什么?
-
您回答错了问题。链接的问题是转了多少次,而不是按字典顺序排列的最小答案是多少。
-
@Robᵩ TLE 是 spoj 中使用的首字母缩写词,意思是 Time Limit Exceeded。看来 OP 需要加快他的解决方案。
-
@Watusimoto:是的..我需要旋转次数,但为此,我需要确定字典上最小的字符串是什么
标签: c++ string algorithm lexicographic