标题

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)可以解决。
补充:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

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

2016微软校招笔试题相关推荐

  1. 2014 微软校招笔试题以及答案(求指正)

    校招题目链接: http://blog.csdn.net/xiaoerlyl/article/details/12126807 参考答案:(仅供参考,待修正) 1. BD 线程可以共享主进程的内存空间 ...

  2. 2016小米校招笔试题

    1 给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次. 方法一: 首先说排序对于处理很多问题都是非常有效的,例如寻找兄弟单词等问题中,经过排序处理后,问题就明朗了很多: 线段 ...

  3. 微软校招笔试题#1092 : Have Lunch Together详解以及源码分析

    #1092 : Have Lunch Together 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Everyday Littile Hi and Little Ho ...

  4. 数据分析真题日刷 | 欢聚时代2018校招笔试题-产品经理/数据分析/游戏运营/市场专员 A卷

    今日真题 欢聚时代2018校招笔试题-产品经理/数据分析/游戏运营/市场专员 A卷(来源:牛客网) 题型 客观题:单选5道,不定项选择10道 主观题:问答4道 完成时间 90分钟 牛客网评估难度系数 ...

  5. 九月十月 阿里 百度 华为 校招笔试题

    九月迅雷,华为,阿里巴巴,最新笔试面试十题 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面 ...

  6. 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...

    原标题:2017美团点评的运维岗校招笔试题,测测你会几题? 1.数据库:以下哪项不是HASH索引的特征? A MySQL不能确定在两个值之间大约有多少行 B 不能使用hash索引来加速ORDER BY ...

  7. 【美团校招笔试题】去除字符串首尾空格,中间多个空格只保留一个

    要求: 这是本人参加美团校招在线考试笔试题,如果此行为违反了美团校招笔试题商业保密性,请与本人联系. 思路:用一个while循环扫描整个字符串,用pStart字符指针指向整个字符串首地址,如果遇到首部 ...

  8. 名企笔试:京东 2016 算法工程师笔试题(登楼梯)

    名企笔试:京东 2016 算法工程师笔试题(登楼梯) 2017-02-04 算法爱好者 有一段楼梯台阶有 15 级台阶,以小明的脚力一步最多只能跨 3 级,请问小明登上这段楼梯,有多少种不同的走法? ...

  9. 小米运维部14年校招笔试题A的个人答案

    15年准备实习生面试时答的题,仅供参考 具体题目详见  http://www.tuicool.com/articles/eYRZBr http://noops.me/?p=1154 一.linux基础 ...

最新文章

  1. 01-HTML基础与进阶-day6-录像281
  2. AI复原上海民国名媛影像!1929年的小姐姐,时装精致不输现在
  3. 如何看待计算机视觉未来的走向?
  4. SAP MM 采购ERP顾问咨询费限制总金额的框架协议实现方案
  5. 求职面试的十大错误,你犯过吗? | 每日趣闻
  6. Codeforces Round#434 DIV.2
  7. (剑指Offer)面试题18:树的子结构
  8. boost::log模块实现如何同时对多个文件执行日志记录的测试程序
  9. 10 个超炫酷后台控制面板(附 GitHub下载链接)
  10. 游戏数仓分析(二)SpringBoot项目对数据进行可视化展示
  11. ACM-ICPC 2019 山东省省赛 A Calandar
  12. 从此不再惧怕URI编码:JavaScript及C# URI编码详解
  13. Highcharts教程--把js代码从html中抽离出来,放到单独的一个js文件中。由html页面调用...
  14. 原码、反码、补码,计算机中所有的数都是以补码的形式存储的
  15. 【JavaWeb】前端框架之Bootstrap
  16. laravel框架中文手册_node.js 后端框架star 排名 2020年11月更新,fastify 超 egg
  17. jQuery获取URL参数
  18. java基础—采用递归的方式来获取相关目录下的子目录的名称
  19. 【报告分享】2020年中过短视频+教育发展展望.pdf(附教育行业交流社群及报告下载链接)...
  20. 计算机一级插入页眉,2017年计算机一级WPS辅导:WPS中页眉页脚的设计技巧

热门文章

  1. Linux中更新pycharm即删除旧的pycharm,装新的pycharm
  2. filezilla:不安全的服务器,不支持FTP over TLS
  3. 201217,成交量异动检测
  4. mov 和 mp4 格式的区别
  5. 21世纪最伟大的学习法——顺便学习法
  6. 国际表征学习会议ICLR 2020共计198篇开源代码论文目录
  7. IDEA导出apk文件
  8. 常见的光纤连接器有哪些?光纤连接器的种类科普
  9. 《Android 应用 之路》 每日一文简单版Kotlin
  10. 最全的世界汽车标志欣赏和LOGO释义