我尝试在O(n)时间内使用problem在SPOJ中解决此Booth Algorithm,但它失败了虽然它适用于我尝试的所有测试用例。
然后我在O(n ^ 2)时间用Brute force方式做了,它起作用了。我已经附上了两个案例的代码,告诉我哪里出错了,或者Booth算法是否正确解决了这个问题?
不是问题,找到按字典排序的最小字符串的最小旋转
对于第一种方法,Booth算法:http://ideone.com/J5gl5
对于第二种方法,蛮力:http://ideone.com/ofTeA
答案 0 :(得分:5)
例如,您的算法为字符串“ABAED”提供了错误的答案。
您的算法返回7(即使这比字符串长!)。
正确的答案是0。
(注意这个错误也可能出现在您找到算法描述的任何地方!如果您查看wikipedia article的历史/讨论,有很多修改错误的修改 - 都声称要修复错误在原始论文中,并修复错误修复中的错误...)
如果你更换它似乎工作得更好:
if( lst[i] < lst[ans+i+1] )
与
if( lst[j] < lst[ans+i+1] )