[ACdream] 女神教你字符串——三个气球

Problem Description

女神邀请众ACdream开联欢会,显然作为ACM的佼佼者,气球是不能少的~。女神准备了三种颜色的气球,红色,黄色,绿色(交通信号灯?)

有气球还不能满足女神,女神要在气球上写字。

写什么好呢~?字符串神马的最有爱了~

女神先拿出一个字符串,然后把字符串的每一个真·前缀写到了黄色气球上面,每一个真·后缀写到了绿色气球上面,每一个真·子串写到了红色气球上面。

对于一个字符串s[1...n],真·前缀为s[1...i](1<=i<n)·,真·后缀为s[j...n](1<j<=n),真·子串为s[i...j](1<i<=j<n)

于是女神就得到了好多好多的气球~

那么在同时出现在三种颜色的气球上的字符串中,最长是什么?

神马,404 not found? 找不到这样的字符串?女神很生气!那就只好输出"angry goddess"了。(不包括双引号,注意大小写,中间有一个空格)

Input

多组数据,每组数据一行字符串,长度不超过100000,

Output

对于每组数据,输出一个字符串

Sample Input

abcabcabc
aaaaaaaaa
abcabc

Sample Output

abc
aaaaaaa
angry goddess

解题思路:   其实这题就是求,一个字符串中有没有三个相同的子串,这三个字串必须一个是 s1[0..i<n-1],s2[0<i....j<n-1],s3[0<j....n-1],刚开始的做法是直接用kmp算法一个一个搜符合条件的,但是由于数据很大超时,最后想到了next数组的原理正好他的值就是前后缀相等的个数,只要再找出与中间的next[i]相等的就符合条件了,当然这一个也是最大的串,首先将len=next[strlen(ab)],从最后往前找,找到符合条件的就结束,可以输出结果,找不到就就len=next[len],不然会超时!如果没有找到一个,那么这个结束条件是len=-1或者=0

AC代码:

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
char ab[100005];
char nb[100005];
int next[100005];
void getNext(char *nb)
{
    int j=0,k=-1;
    next[0]=-1;
    while(j<strlen(nb))
    {
        if(k==-1||nb[j]==nb[k])
        {
            j++;  k++;
            next[j]=k;
        }
        else  k=next[k];
    }
}
int main()
{
    int i,temp,max1;
    while(gets(ab))
    {
        temp=0;max1=0;
        strcpy(nb,ab);
        getNext(nb);
        int len=next[strlen(ab)];
        while(len!=0&&len!=-1)
        {
             for(i=2;i<strlen(ab)-1;i++)
             {
                if(len==next[i])
                {
                    temp=1;break;
                }
            }
            if(temp) break;
            len=next[len];
        }
        if(!temp) printf("angry goddess");
        for(i=0;i<len;i++)
        {
            printf("%c",ab[i]);
        }
        cout<<endl;
    }
    return 0;
}
时间: 2024-10-29 03:14:50

[ACdream] 女神教你字符串——三个气球的相关文章

[ACdream]女神教你字符串——违和感

题目描述: 女神最喜欢字符串了,字符串神马的最有爱了. 女神是一个重度强迫症患者,面对不是对称的东西,她会觉得太违和了,就会爆炸.所以她手上的字符串都是回文的,像什么a,b,aabaa,abcba,上海自来水来自海上...等等. 女神的人生理想就是把所有字符串都改造成回文串!这是非常宏伟的理想. 一切理想都从最简单的开始. 好了,现在女神面前有一堆字符串,然后请问能否通过删去一个字符,使这个字符串变成回文串? Input 多组数据,每组数据是一个字符串S,仅有英文小写字母组成 1<=|S|<=

[ACdream]女神教你字符串——导字符串

Problem Description 正如大家知道的,女神喜欢字符串,而在字符串中,女神最喜欢回文字符串,但是不是所有的字符串都是回文字符串,但是有一些字符串可以进行“求导”来变成回文字符串. 字符串中只包含小写字母.求导过程如下,C++: string dif(const string x) { if(x.length()<=1) return ""; string res=""; for(int i=1;i<x.length();++i) res+

43左旋转字符串+三步反转法

题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 思路:所有的反转题目尤其是字符串,都记得使用三步反转法.旋转类问题,比如字符串反转. 使用三步反转法: 1)使用O(n)的时间,直接遍历找到反转的中间元素: 2)将中间

[日常] 算法-旋转字符串-三步翻转法

题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串"abcdef"前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串"cdefab".请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1). 分析与解法 解法二:三步反转法 对于这个问题,换一个角度思考一下. 将一个字符串分成X和Y两个部分,在每部分字符串上定义反转操作,如X^T,即把X的所有字符反转(如,X="

3、手把手教你Extjs5(三)MVVM特性的简单说明

下面我们来看一下自动生成的代码中的MVVM架构的关系.Main是一个可视的控件,MainController是这个控件的控制类,MainModel是这个控件的模型类. 在上面的图片中,左边是Main.js中的代码,右边是MainController.js 和 MainModel.js中的代码,可以看到MVVM中的事件绑定和属性值绑定都用到了.上图中红色的部分标注了一个按钮“Button”的handler(即click)事件绑定到MainController.js中的函数“OnClickButto

数组与字符串三(Cocos2d-x 3.x _Array容器)

"程序=数据结构+算法" 在面向对象的语言中,诸如数组.堆栈.队列等的结构都被封装成了特定的类,按照特定数据结构的算法设计起来,这就是容器类. Cocos2d-x中,能使用的容器类:C++标准容器类.Cocos2d-x中定义的容器类.其中,列表容器类包括:_Array.Vector<T>和ValueVector:字典容器包括:_Dictionary.Map<K,V>.ValueMap和ValueMapIntKey. _Array 继承于Ref类,(2.x版本中是

三句话教你买对房子!买到好房子的都祝福哥三年内赚两个亿!

http://bbs.tianya.cn/post-house-482606-1.shtml 看见很多菜人花了老爸老妈一辈子的钱买了破房,哥心痛呀,做点善事,教你一下,三分钟学会买房,看了此贴买到好房的都给哥祝福一下:三年内赚两个亿! 买房很简单,就三句话,记住就行,对着这几个字去买,百分百对. 三句话总概述为:五无,六有,四基本. 四基本:透,亮,正,静. 五无:立交,工厂,医院,幅射,污柒. 六有:山,水,学校,公园,地铁,商超. 以上几条不可能全达到,但达到越多者房子越好. 再送几句买房要

python基础数据类型----整数 ,字符串【常用操作方法】,布尔值,for循环

Python基础数据类型(4.29) bool str int 三者之间的转换 str索引切片,常用操作方法 for循环(大量的练习题) 1.基础数类型总览 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). 10203 123 3340 int 主要用于计算+- * / 等等 '今天吃了没?' str 存储少量的数据,并进行相应的操作.str1 + str2, str *int , 索引,切片, 其他操作方法 Tru

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件