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;
    }
    
    
    




















  • 相关阅读:
    记一次授权的APK渗透测试
    Web.config在渗透中的作用
    ctf中关于syscall系统调用的简单分析
    【文件包含&条件竞争】详解如何利用session.upload_progress文件包含进行RCE
    利用python免杀cs shellcode
    记一次ARM架构的ROP利用
    改造冰蝎对抗waf&OpenRASP计划-初探
    java后台管理 开源_12款开源的JAVA后台管理项目
    ECS 选款利器!PTS助您快速上云!
    Ocelot 负载均衡
  • 原文地址:https://www.cnblogs.com/LUO77/p/5826027.html
Copyright © 2011-2022 走看看