hihocoder #1152 : Lucky Substrings
来源:互联网 发布:导出数据库命令 编辑:程序博客网 时间:2024/06/10 20:27
描述
A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Given a string consisting of only lower case letters, output all its lucky non-empty substrings in lexicographical order. Same substrings should be printed once.
输入
A string consisting no more than 100 lower case letters.
输出
Output the lucky substrings in lexicographical order, one per line. Same substrings should be printed once.
样例输入
aabcd
样例输出
aaaaabaabcababcbbcbcdccdd
这道题的意思一开始理解错了,坑了半天。。。。
正确的意思是,在字符串S中,如果不同的字符个数满足斐波那契数列也就是1,1,2,3,5,8……(注意是从1开始的)那么这个字符串就是lucky的。比如说字符串“afgagfds”它的不同的字符个数是5个,那么它就是lucky的;再比如“asdfa”不同的字符有4个,就不属于lucky。题目最后就要按照字典序输出一个字符串中所有的lucky子串。
首先我计算了斐波那契数列,在BOOL数组对应位置置为true,其余的为false,用的时候就直接取对应的位置找是否在数列中。比方说,3在斐波那契数列中,则数组[3]=true,然后在实际判断中用if(数组[3])。我用了substr()函数截取子串
_Myt substr(size_type _Off = 0, size_type _Count = npos) const
第一个参数是起始位置,第二个参数是截取的长度。截取好子串后,就用一个num数组来记录某个字符被访问过没,访问了就置true,初始值置为false。若对应的位置为true,就知道这个字符出现过,不用继续统计了。用count保存不同的字符个数。然后用if(数组[count]),判断count是否在斐波那契数列中。如果是就插入到set中,set是一个关联式容器,而且能按照字典序自动排序,也就是说,往set里面一塞就好,不用担心顺序问题了。最后输出set中的所有元素。下面是AC代码:
//#1152 : Lucky Substrings#include<iostream>#include<map>#include<string.h>#include<string>#include<queue>#include<vector>#include <stdio.h>#include<fstream>#include<set>#include<stdlib.h>using namespace std;#define Min(a,b) a<b?a:b#define INF 1000000005#define Num 100000+5bool feibo[101];set<string> jieguo;int LuShi(){ string str; cin >> str; memset(feibo, false, sizeof(feibo)); int a = 1, b = 1; while (b<101)//计算好斐波那契数列 { feibo[b] = true; int c = a + b; a = b; b = c; } /*string tempStr = str.substr(2, 2); cout << tempStr << endl;*/ for (int i = 0; i < str.length(); i++)//从字符串头开始 { for (int j = 1; j < str.length()-i+1; j++)//每次截取的长度大于0,小于剩余的长度 { bool num[30]; int count = 0; memset(num, false, sizeof(num)); string tempStr = str.substr(i, j); for (int k = 0; k < tempStr.length(); k++) { if (!num[tempStr[k] - 'a']) {//如果这个字符未被访问过 count++;//计数+1 num[tempStr[k] - 'a'] = true;//标记该字符已经被访问过 } } if (feibo[count]) {//如果count属于斐波那契数列 jieguo.insert(tempStr); } } } for (set<string>::iterator i = jieguo.begin(); i != jieguo.end(); i++) { cout << *i << endl;//由于set容器已经自动排序了,因此只用按照顺序输出就好 } return 0;}int main(){ //Solution sol; //重定向,OJ时注意把它注释掉 streambuf * oldbuf = cin.rdbuf((new ifstream("C:\\Users\\yzc\\Desktop\\input.txt"))->rdbuf()); //cout << LuShi() << endl; LuShi(); system("pause"); //Fromfile.close(); return 0;}
- hihoCoder - 1152 - Lucky Substrings
- hihocoder #1152 : Lucky Substrings
- hihocoder Lucky Substrings
- Lucky Substrings HihoCoder
- hihoCoder week 84 P1 : Lucky Substrings 【dp】
- Lucky Substrings
- Lucky Substrings微软在线测试
- hihoCoder_W84 Lucky Substrings(基础做法)
- Lucky Substrings 微软2016校园招聘在线笔试第二场
- lucky
- 微软2016校园招聘在线笔试第二场 题目1 : Lucky Substrings
- Substrings
- Substrings
- Substrings
- Substrings
- Substrings
- Substrings
- Substrings
- Spring AOP 演化过程(二):基于代理的经典Spring AOP
- 1. Java NIO系列之介绍
- 反射
- tensorflow 语法
- Spring mvc+Spring+hibernate整合
- hihocoder #1152 : Lucky Substrings
- C++ STL中Map的按Key排序和按Value排序
- Ubuntu16.04 安装搜狗输入法
- 使用JAVA理解程序逻辑第二章
- React-Native-Navigator导航条-反向传值
- 成员变量和局部变量的区别?
- 二分图最大匹配
- Activity横竖屏切换后的生命周期
- C# 如何给Winform的button等控件添加快捷键