UVa1584 - Circular Sequence

举报
小哈里 发表于 2022/05/11 00:10:12 2022/05/11
【摘要】 //UVa1584 - Circular Sequence//题目:给你一个环状串,输出它以某一位置为起点时得到最小字典序的串。//分析:从初位置到末位置每次更新字典序较小的起始位置#include<stdio.h>#include<string.h>#define max 105//对于序列s,i是否比ans小...

  
  1. //UVa1584 - Circular Sequence
  2. //题目:给你一个环状串,输出它以某一位置为起点时得到最小字典序的串。
  3. //分析:从初位置到末位置每次更新字典序较小的起始位置
  4. #include<stdio.h>
  5. #include<string.h>
  6. #define max 105
  7. //对于序列s,i是否比ans小
  8. int find(char* s, int x, int y){
  9. int len = strlen(s);
  10. //字典序比较:直接比较从第i个起的不相等的较小字符即为字符串较小字典序(//长度不等时较短的就较小)
  11. for(int i = 0; i < len; i++){
  12. if(s[(x+i)%len] != s[(y+i)%len])
  13. return s[(x+i)%len] < s[(y+i)%len];
  14. }
  15. return 0;//相等
  16. }
  17. int main(){
  18. int T;
  19. char s[max];
  20. scanf("%d",&T);
  21. while(T--){
  22. scanf("%s",s);
  23. int ans = 0;
  24. int len = strlen(s);
  25. for(int i = 1; i < len; i++){
  26. if(find(s, i, ans)) ans = i;
  27. }
  28. //***输出,用取模的方法来实现,从尾到头相连接的环装输出
  29. for(int i = 0; i < len; i++)
  30. putchar(s[(i+ans)%len]);
  31. putchar('\n');
  32. }
  33. return 0;
  34. }
  35. /*
  36. *DATE IN:
  37. 2
  38. CGAGTCAGCT
  39. CTCC
  40. *DATE OUT:
  41. AGCTCGAGTC
  42. CCCT
  43. */

文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/54838467

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。