UVA455 - Periodic Strings

原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=396

题意:  如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例
           如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
            输入一个长度不超过80的字符串,输出其最小周期

解题思路过程:

            首先,我想到的是用队列

               把待测串s[]的首字符s[0]入队,从第二个字符s[1]开始和队首元素对比,

                      if(s[i]==c.pop())(c为队列)队首出队;sum++;

                      else c.push(s[i])

              一直到队列为空or所有元素都遍历过一遍为止。

              最后如果sum==0 || 串的长度与sum取模!=0 就说明它的最短周期是它本身

 

 1 #include <iostream>
 2 #include<string>
 3 #include<queue>
 4 using namespace std;
 5 int main(){
 6    int T;
 7    cin>>T;
 8    while(T){
 9       string a;
10       cin>>a;
11       int len=a.length();
12       int lena=len;
13       len--;
14       queue<char>c;
15       c.push(a[0]); 
16       int i=1,sum=0;
17       while(!c.empty()&&len){
18            char temp=c.front();
19           if(temp==a[i]){
20               c.pop();sum++;
21            }
22           else c.push(a[i]);
23          i++;len--;
24        }
25       // if(sum==1)sum=lena;
26        if(sum==0)sum=lena;
27        else if((lena%sum)!=0)sum=lena;
28        cout<<sum<<endl;
29        T--;
30     }
31     return 0;
32 }

后来测试才发现,这算法有个致命的bug!!!

“算法盲点”:amanamanamanaman
按此串所模式,最小周期应该是4,但因为使用队列的缘故,无法实现出现队列为空的情况顾,此路不通。。。

 


经过重新观察数据规模,发现和题意,发现通过枚举完成此题。

 1 #include <iostream>
 2 #include<string>
 3 #include<queue>
 4 using namespace std;
 5 int main(){
 6     int T;
 7     cin>>T;
 8     while(T){
 9         string a;
10         cin>>a;
11         int ok=1;
12         int len=a.length();
13         for(int i=1;i<=len;i++){
14             if(len%i==0){
15                 ok=1;
16                 for(int j=i;j<len;j++){
17                     if(a[j]!=a[j%i]){
18                         ok=0;
19                         break;
20                     }
21                 }
22             }
23             if(ok){cout<<i<<endl;break;}
24         }
25         T--;
26     }
27     return 0;
28 }

首先从1开始枚举子串长度,如果待测串%子串长度==0就可以接着去对照待测串中的元素最终找出待测串的最小周期

转载于:https://www.cnblogs.com/yifeianyi/p/6900118.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从底层重学 Java 之 BigInteger 大整数 Gitchat连接

Gitchat连接 https://gitbook.cn/gitchat/activity/5f395a80aced402379f6a0ca 简介 从底层&#xff0c;从原理&#xff0c;我们来重学一次 Java。BigInteger 是大整数计算类&#xff0c;是BigDecimal用于存储大数属性的类型&#xff0c;BigDecimal中很多计算就是基于BigInte…

让我们聊聊秒杀这东西

万事皆有因 这段似乎都成我写blog标准开头。言归正转&#xff0c;公司以前业务涉及到秒杀&#xff0c;并且是白天从10点起到晚上10点每小时一次&#xff08;TT天天心惊肉跳的&#xff09;&#xff0c;周六还有个大礼包活动&#xff08;重量级&#xff0c;经常会出一些你意想不到…

工作总结11:vue获取数据接口

getAction(/deparment/list,{})第一个参数是请求的接口url&#xff0c;第二个参数是需要传的请求接口需要传的参数例如需要传page1和limit5&#xff0c;第二个参数就要像这样写{page:1,limit:5}

从底层重学 Java 之 Character 字符型 Gitchat连接

Gitchat连接 https://gitbook.cn/gitchat/activity/5f50804bbe67a5348a9b2c91 简介 从底层&#xff0c;从原理&#xff0c;我们来重学一次 Java。Character 是char&#xff08;字符&#xff09;的封装类&#xff0c;是String用于字符存储的类型&#xff0c;他的源码及实现是…

Day7: Linux基础片:系统监控

一下1&#xff0c;2&#xff0c;3&#xff0c;4分别代表截图中第一行&#xff0c;第二行&#xff0c;第三行&#xff0c;第四行表示的内容 top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 当前时间&#xff0c…

工作总结12:封装组件

selectform组件 <!--封装部门选择的插件 需要的组件--> <template><el-select :value"value" placeholder"请选择所属部门" change"handleChange"><el-optionv-for"department in departments":key"depart…

Windows 环境下 Chrome浏览器崩溃“STATUS_INVALID_IMAGE_HASH”

问题 Windows环境下&#xff0c;新版的Chrome浏览器下载安装后&#xff0c;打开就报错&#xff0c;提示错误代码为“STATUS_INVALID_IMAGE_HASH”。重新打开、打开新标签页、刷新均无效。 解决 导致这个问题的原因是 Google 在79版本&#xff08;2019年12月20号左右&#xf…

工作总结13:vue官网封装组件

事件名 不同于组件和 prop&#xff0c;事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。举个例子&#xff0c;如果触发一个 camelCase 名字的事件&#xff1a; this.$emit(myEvent) 则监听这个名字的 kebab-case 版本是不会有任何…

从底层重学 Java 之 Stream 初探 Gitchat连接

Gitchat连接 https://gitbook.cn/gitchat/activity/5f85696aad812d16b498848c 简介 从底层&#xff0c;从原理&#xff0c;我们来重学一次 Java。Stream 是JDK8中新引入的&#xff0c;方便了数据列表的过滤、投影、遍历等各种处理&#xff0c;他的源码及实现是怎样的呢&…

签到题

直接查看源代码 nctf{flag_admiaanaaaaaaaaaaa}转载于:https://www.cnblogs.com/maodun/p/6912628.html

从底层重学 Java 之 Stream 并行及标志 GitChat连接

GitChat连接 https://gitbook.cn/gitchat/activity/5f8fc6cd1f577d4d9f428562 简介 从底层&#xff0c;从原理&#xff0c;我们来重学一次 Java。Stream 是JDK8中新引入的&#xff0c;方便了数据列表的过滤、投影、遍历等各种处理&#xff0c;他的源码及实现是怎样的呢&…

工作总结16:多看官网

多看官网 https://cn.vuejs.org/v2/guide/components.html

201521123121 《Java程序设计》第14周学习总结

1. 本周学习总结 1.1 以你喜欢的方式&#xff08;思维导图或其他&#xff09;归纳总结多数据库相关内容。 数据库的基本特点 1、实现数据共享 数据共享包含所有用户可同时存取数据库中的数据&#xff0c;也包括用户可以用各种方式通过接口使用数据库&#xff0c;并提供数据共享…

Java操作Mongo bulkWrite批量入库

Mongo bulkWrite示例 public boolean insertBulk(String collectionName, JSONArray array) {MongoCollection<Document> collection db.getCollection(collectionName);List<InsertOneModel<Document>> documentList array.stream().map(item -> {Doc…

工作总结17:组件封装思想

就是把部门下拉框选择这部分变成一个组件&#xff0c;在用户创建的时候引入这样就可以把功能不相关代码模块化&#xff0c;以后也便于管理如果别的地方也要用到部门选择&#xff0c;可以直接再次引入&#xff0c;就不用重复写代码了

c#程序中使用quot;like“查询access数据库查询为空的问题

今天&#xff0c;在开发的过程中发现了一个特别奇怪的问题&#xff1a;access中like查询时候。在Access数据库中运行&#xff0c;发现能够查询出结果。这是在数据库上运行。select * from KPProj where KpName like *測试*&#xff0c;可是相同的语句在c#程序中却查询为空。这是…

SpringBoot启动yaml报错

报错找不到org.yaml里的一个方法 10:45:54.742 [main] ERROR org.springframework.boot.SpringApplication - Application run failed java.lang.NoSuchMethodError: org.yaml.snakeyaml.nodes.ScalarNode.getScalarStyle()Lorg/yaml/snakeyaml/DumperOptions$ScalarStyle;at …