循环单词--全国模拟(一)

[编程题] 循环单词
时间限制:1秒
空间限制:32768K
如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。 
输入描述:
输入包括n+1行:
第一行为单词个数n(1 ≤ n ≤ 50)
接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成
 
 
输出描述:
输出循环单词的种数
 
输入例子:
5 picture turepic icturep word ordw
 
输出例子:
2
 
解题思路:本题参考自剑指offer左旋转字符串,用set存储每类循环单词的总情况,对于每个给定单词,在set中找是否有,有的话就说明为一类,进行下一个单词的查找,如果没有,找到这个单词的所有循环单词,存入set中,并且count++
 1 #include <iostream>
 2 #include <vector>
 3 #include <set>
 4 using namespace std;
 5 void Reverse(char *pStart, char *pEnd)
 6 {
 7     if(pStart == NULL || pEnd == NULL)
 8         return;
 9     while(pStart < pEnd)
10     {
11         char tmp = *pStart;
12         *pStart = *pEnd;
13         *pEnd = tmp;
14         pStart++;
15         pEnd--;
16     }
17 }
18 string LeftRotateString(string str, int n) {
19     if(!str.empty())
20     {
21         int length = str.size();
22         if(length > 0 && n>0 && n < length)
23         {
24             char *pFirstStart = &str[0];
25             char *pFirstEnd = &str[n-1];
26             char *pSecondStart = &str[n];
27             char *pSecondEnd = &str[length-1];
28             //翻转前n个
29             Reverse(pFirstStart,pFirstEnd);
30             //翻转第n+1个到最后
31             Reverse(pSecondStart,pSecondEnd);
32             //翻转整个字符串
33             Reverse(pFirstStart,pSecondEnd);
34         }
35     }
36     return str;
37 }
38 int main()
39 {
40     int n;
41     while(cin>>n)
42     {
43         string s[50];
44         for(int i=0;i<n;i++)
45         {
46             cin>>s[i];
47         }
48         set<string> t;
49         set<string>::iterator it;
50         string tmp;
51         int count = 0;
52         for(int i=0;i<n;i++)
53         {
54             it = t.find(s[i]);
55             if(it == t.end())//没找到
56             {
57                 count++;
58                 for(int j = 0;j<s[i].size();j++)
59                 {
60                     tmp = LeftRotateString(s[i],j);
61                     t.insert(tmp);
62                 }
63             }
64         }
65         cout<<count<<endl;
66     }
67     return 0;
68 }
网上借鉴思路:把要测试的单词后再重复下这个单词,如:picture ,变成 picturepicture
然后判断其他要测试的单词是不是这个串的子串(长度要先相等)
 1 #include <string>
 2 #include <iostream>
 3 #include <vector>
 4 using namespace std;
 5 int main()
 6 {
 7  
 8     int n,num=0;
 9     vector<string> twords;
10     vector<bool> checks;//判断是否已属于某种循环单词
11     cin>>n;
12     for (int i = 0; i < n; i++)
13     {
14         string t_w;
15         cin >> t_w;
16         twords.push_back(t_w);
17         checks.push_back(false);
18     }
19     for (int j = 0; j < n; j++)
20     {
21         if (!checks[j])
22         {
23             string tt;
24             tt = twords[j] + twords[j];
25             for (int k = j + 1; k < n; k++)
26             {
27                 if (!checks[k])
28                 {
29                     if (tt.find(twords[k]) !=string::npos&&twords[k].length() == twords[j].length())
30                     {
31                         checks[k] = true;
32                     }
33                 }
34             }
35             num++;
36         }
37     }
38     cout << num << endl;
39     return 0;
40 }


 

转载于:https://www.cnblogs.com/qqky/p/7027294.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值