Lucky String

14 篇文章 0 订阅

题目

题目描述
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值