hihocoder 1152 Lucky Substrings
#1152 : Lucky Substrings
描述
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 题目大意:给定一个只包含小写字母的字符串S。对于S的任意一个非空子串,若其包含的不同字母个数为fibonacci数列中的数,
则我们认为这个子串为幸运的。请找出S的所有幸运的子串。不要重复输出。解题思路
一个简单的解题思路是直接枚举S的所有子串,并对其不同字母个数进行统计。
S均由小写字母组成,因此其包含的不同字母个数最多为26个。而在26以内且属于fibonacci数列的数为1,2,3,5,8,13,21。因此只有当子串中不同字母的个数为1,2,3,5,8,13,21时,该子串才是幸运的。
接下来即是如何统计一个子串的不同字母个数,下面给出一种比较朴素的方法:
isLucky(subString):
alphabet[] = false
count = 0
For c in subString
If not alphabet[c] Then
alphabet[c] = true
count = count + 1
End If
End For
Return (count is Fibonaccid number)
S的最大长度为 N = 100,该朴素算法的时间复杂度为O(N^3),是可以通过所有数据的。
同时,我们可以通过一个小的优化,将算法的时间复杂度减少的O(N^2)。
在已经知道S[i..j]字母个数的情况下,我们可以直接推导出S[i..j+1]的不同字母个数。
首先我们需要改进
isLucky
函数:alphabet[] = false
count = 0
isLucky(c):
If not alphabet[c] Then
alphabet[c] = true
count = count + 1
End If
Return (count is Fibonaccid number)
这里我们把
alphabet
和count
从函数中抽取出来,作为了全局变量。同时,isLucky
的参数变为单个字符,每次将新增的S[j+1]加入统计中。下面是函数的主体部分:
For i = 0 .. len - 1
alphabet[] = false
count = 0
For j = i .. len - 1
// 此时isLucky返回的是S[i..j]的不同字母数量是否满足条件
If isLucky(S[j]) Then
ansList.push(S[i..j])
End If
End For
End For
最后只需要将
ansList
所保存的子串进行排序去重后输出,即可顺利通过该题目。#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <set>
using namespace std;
string s; bool IsFibonaccidNum(int n){
return (n == || n == || n == || n == || n == || n == || n == );
} bool isLucky(int i, int j){
int alphabet[] = {};
//memset(alphabet, 0, sizeof(alphabet));
int count = ;
for(int k = i; k <= j; k++){
if(alphabet[s[k] - 'a'] == ){
alphabet[s[k] - 'a'] = ;
count++;
}
}
return (IsFibonaccidNum(count));
} int main(){
set<string> set1;
cin >> s;
int len = s.length();
for(int i = ; i < len; i++){
for(int j = i; j < len; j++){
if(isLucky(i, j)){
string str = s.substr(i, j - i + );
set1.insert(str);
}
}
} for(set<string>::iterator it = set1.begin(); it != set1.end(); it++){
cout << *it << endl;
}
//system("pause");
return ;
}#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <set>
using namespace std;
int alphabet[] = {}, cnt; bool IsFibonaccidNum(int n){
return (n == || n == || n == || n == || n == || n == || n == );
} bool isLucky(char c){
if(alphabet[c - 'a'] == ){
alphabet[c - 'a'] = ;
cnt++;
}
return (IsFibonaccidNum(cnt));
} int main(){
set<string> set1;
string s;
cin >> s;
int len = s.length();
for(int i = ; i < len; i++){
memset(alphabet, , sizeof(alphabet));
cnt = ;
for(int j = i; j < len; j++){
if(isLucky(s[j])){
string str = s.substr(i, j - i + );
set1.insert(str);
}
}
} for(set<string>::iterator it = set1.begin(); it != set1.end(); it++){
cout << *it << endl;
}
//system("pause");
return ;
}
hihocoder 1152 Lucky Substrings的更多相关文章
- hihocoder #1152 Lucky Substrings 【字符串处理问题】strsub()函数+set集合去重
#1152 : Lucky Substrings时间限制:10000ms单点时限:1000ms内存限制:256MB描述A string s is LUCKY if and only if the nu ...
- 微软2016校园招聘在线笔试第二场 题目1 : Lucky Substrings
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if and only if the number of different ch ...
- Lucky Substrings
而在26以内且属于fibonacci数列的数为1,2,3,5,8,13,21时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if ...
- Lucky String
Lucky String -- 微软笔试 标签(空格分隔): 算法 A string s is LUCKY if and only if the number of different charact ...
- 【每天一道算法题】Lucky String
A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Gi ...
- hihoCoder 1426 : What a Ridiculous Election(总统夶选)
hihoCoder #1426 : What a Ridiculous Election(总统夶选) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - ...
- hihoCoder 1432 : JiLi Number(吉利数)
hihoCoder #1432 : JiLi Number(吉利数) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Driver Ji l ...
- lucky 的 时光助理(2)
lucky小姐说:昨天晚上他喝醉了,发消息说他想我了,说他后悔了. 我很惊讶. 我问lucky:你们很久都没有联系, 突然说... 你怎么想. 没错,'他'就是lucky的前男友. lucky看着我, ...
- lucky 的 时光助理
2017年的lucky小姐,厌倦了现在的工作,她觉得这些的工作对于她而言不具备挑战性,她在迷茫春节过后该如何选择, 这里是距她走出校门整整一年的时光. lucky小姐从开发走向了实施,目的是想周游这个 ...
随机推荐
- js 判断pc与手机
var u = navigator.userAgent; if ((u.indexOf('Mac') > -1 || u.indexOf('Windows') > -1) &&am ...
- ExtJs非Iframe框架加载页面实现
在用Ext开发App应用时,一般的框架都是左边为菜单栏,中间为tab页方式的显示区域.而tab页面大多采用的嵌入一个iframe来显示内容.但是采用iframe方式有一个很大的弊端就是每次在加载一个新 ...
- Response.Redirect 打开新窗体的两种方法
普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...
- BZOJ 1014: [JSOI2008]火星人prefix Splay+二分
1014: [JSOI2008]火星人prefix 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1014 Description 火星人 ...
- 手把手教你使用 Imagepro plus - 宏操作【转】
Imagepro plus操作5 – 提高测量效率的必须技术-宏操作(续) 星期三, 七月 7th, 2010 | 图像分析 | hbchendl | 浏览:897 请先参阅:Imagepro plu ...
- 字符集乱码问题:ISO-8859-1和GBK
问题,引用百度知道的问题吧: http://zhidao.baidu.com/question/51342167.html?qbl=relate_question_0&word=%C3%84% ...
- js 获取cookie
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head ...
- [Angular 2] Generate and Render Angular 2 Template Elements in a Component
Angular 2 Components have templates, but you can also create templates inside of your templates usin ...
- iOS xcode8提交 iOS10 “此构建版本无效” (已解决)
近期上传应用,遇到了"此构建版本无效"的问题,如图 网查了一下,解决了这个问题:(注意:先不要急着怀疑是网络问题,重新提交,先检查问题,别问我怎么知道的...) 1:iOS10 之 ...
- [转]Oracle快速入门
原文出处:http://blog.csdn.net/yueguanghaidao/article/details/7019377 select * from scott.salgrade; /*解锁s ...