Lucky String

来源:互联网 发布:java计算运费代码 编辑:程序博客网 时间:2024/06/08 11:47

题目

题目描述
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

输出例子:
a
aa
aab
aabc
ab
abc
b
bc
bcd
c
cd
d

答案

#include <iostream>#include <string>#include <vector>#include <set>#include <algorithm>using namespace std;vector<int> fibonacci({ 1, 2, 3, 5, 8, 13, 21 });//计算一个字符串出现的不同字符的个数//使用了STL中的count函数bool isLucky(string &s){    int word[26] = { 0 };    int countNum = 0;    for (int i = 0; i<s.size(); i++){        if (word[s[i] - 'a'] == 0){            countNum++;            word[s[i] - 'a'] = 1;        }    }    return count(fibonacci.begin(), fibonacci.end(), countNum);}int main(){    set<string> resultStr;    set<string>::iterator iter;    string str;    cin >> str;    for (int i = 0; i < str.length(); i++){        for (int j = i+1; j<=str.length(); j++){            //string subStr(str, i, j-i);  也可以这样实现            string subStr(&str[i], &str[j]);            if (isLucky(subStr)) resultStr.insert(subStr);        }    }    for (iter = resultStr.begin(); iter != resultStr.end(); iter++)        cout << *iter << endl;    getchar();    getchar();    return 0;}

总结

在这道题里面需要注意的点:
1. 计算一个字符串中出现的不同字符的个数
2. STL中count()函数的用法
3. String 函数的不同构造函数的区别
4. 为什么getchar()在这里用了两次

0 0
原创粉丝点击