zoukankan      html  css  js  c++  java
  • 【每天一道算法题】Lucky String

    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

    微软的题目。
    字符串处理,主要是找到子串,然后判断子串里不同的字符数。主要由三个难点:

    1、判断子串里不同字符个数,可以用一个大小为26char数组来解决:如果出现过就置1,如果没有出现过就是默认的0.(用count函数解决)

    2、主要就是要生成全部的substring,以及26以内的fibonacci数列。
    26以内的fibonacci数列只有 1 2 3 5 8 13 21 34 55 89,用一个const int数组可以表示。然后用STL里的find函数来判断是否为fibonacci数列。

    3、构建子串,用STL里的string的substr(int i,size_t size)可以解决。


    #include <iostream>
    #include <string>
    #include <vector>
    #include <set>
    #include <algorithm>
    using namespace std;
    
    int count(string s) {
        int p[26] = { 0 }, R = 0;
        for (int i = 0; i<s.length(); i++)
            if (p[s[i] - 'a'] == 0) {
                R++;
                p[s[i] - 'a'] = 1;
            }
        return R;
    }
    int main() {
        string str;
        set<string> s;
        cin >> str;
        const int fibonacci[] = { 1,2,3,5,8,13,21};
        vector<int> vec1(fibonacci, fibonacci + 7);
    
        int n = 1;
        while (n<str.length()) {
            for (int i = 0; i <= str.length() - n; i++) {
                string ss = str.substr(i, n);
                if (find(vec1.begin(), vec1.end(), count(ss)) != vec1.end())
                    s.insert(ss);
            }
            n++;
        }
        set<string>::iterator it;
        for (it = s.begin(); it != s.end(); it++)
            cout << *it << endl;
        return 0;
    }
    
    
    




















  • 相关阅读:
    查看java程序中对象占用空间大小
    elasticsearch的基本了解
    kafka命令及启动
    屠龙之路_大杀技之倚天屠龙_TenthDay
    屠龙之路_坚持就是胜利_NinthDay
    屠龙之路_狭路相逢勇者胜_EighthDay
    屠龙之路_任生活如何虐你,屠龙之路还得继续_SeventhDay
    屠龙之路_假期罢工和公主私奔_SixthDay
    屠龙之路_击败DB小boss_FifthDay
    屠龙之路_转角遇到服务器大魔王_FourthDay
  • 原文地址:https://www.cnblogs.com/LUO77/p/5826027.html
Copyright © 2011-2022 走看看