串应用- 计算一个串的最长的真前后缀

题目描述

给定一个串,如ABCDAB,则 ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA } ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB } 因此,该串的真前缀和真后缀中最长的相等串为AB,我们称之为该串的“最长的真前后缀”。 试实现一个函数string matched_Prefix_Postfix(string str),得到输入串str的最长的真前后缀。若不存在最长的真前后缀则输出empty

输入

第1行:串的个数 n 第2行到第n+1行:n个字符串

输出

n个最长的真前后缀,若不存在最长的真前后缀则输出empty。

样例输入

6 a ab abc abcd abcda abcdab

样例输出

empty empty empty empty a ab

提示

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string matched_Prefix_Postfix(string s)
{
    int slength=s.size();
    string before[slength-1];
    string after[slength-1];
    for(int i=0;i<slength-1;i++)
    {
        before[i]=s.substr(0,i);
    }
    reverse(s.begin(),s.end());
    for(int i=0;i<slength-1;i++)
    {
        after[i]=s.substr(0,i);
        reverse(after[i].begin(),after[i].end());
    }
    reverse(s.begin(),s.end());
    int Max=0;
    int index=-1;
    for(int i=0;i<slength-1;i++)
    {
        for(int j=0;j<slength-1;j++)
        {
            if(before[i]==after[j])
            {
                int t=after[i].size();
                if(t>Max)
                {
                    index=i;
                    Max=t;
                }
            }
        }
    }
    if(Max==0)
    {
        string e="empty";
        return e;
    }
    else
    {
        string f=before[index];
        return f;
    }
}

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        string s;
        cin>>s;
        cout<<matched_Prefix_Postfix(s)<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180767.html

时间: 2024-08-30 10:33:07

串应用- 计算一个串的最长的真前后缀的相关文章

java中计算一个方法执行时长,耗费单位(秒)

long startTime=System.currentTimeMillis(); //执行方法 long endTime=System.currentTimeMillis(); float excTime=(float)(endTime-startTime)/1000; System.out.println("执行时间:"+excTime+"s");

POJ 2774 Long Long Message(最长公共子串 -初学后缀数组)

后缀数组的两篇神论文: 国家集训队2004论文集 许智磊 算法合集之<后缀数组--处理字符串的有力工具> 很多人的模版都是用论文上的 包括kuangbin的模版:(DA算法) 模版中比较难理解的地方有两点1.按关键词排序 2.把字符串长度增加一位 按关键词排序的意思其实是基数排序中相当把两位数排序时先排个位,再排十位 这里也一样先排后2^k长度的字符串,再排前2^k长度的字符串,最终排成2^(k+1)字符长度的后缀数组sa 把字符串增加一位,是为了让有意义的串的rank从1开始,还有便于后边不

POJ 题目1743 Musical Theme(后缀数组,求一个串中最长不重叠重复子串)

Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21826   Accepted: 7467 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a key on the

找出一个字符串中最长重复次数的子字符串,并计算其重复次数

原题 找出一个字符串中最长重复次数的子字符串,并计算其重复次数.例如:字符串"abc fghi bc kl abcd lkm abcdefg",并返回"abcd"和2. 我的思路 为了方便表述,我们使用变量src作为原字符串,sub_str作为子字符串. 由于题目要求寻找至少重复2次的最长的子字符串,重点在于最长的子字符串,而不在于重复的最多次数.因此我们可以从长度最长的字符串入手,计算其重复次数.只要重复达到2次,即可返回该字符串. 显然长度最长的子字符串就是原串

(KMP 1.2)hdu 1686 Oulipo(计算模式串在文本串中出现的次数)

题目: Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5985    Accepted Submission(s): 2404 Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition,

Petrozavodsk Winter-2013. Ural FU Contest Problem D. Five Palindromes manacher、一个串切割成5个回文子串、优化

Ural Federal University Contest, SKB Kontur Cup Petrozavodsk Winter Training Camp, Saturday, February 2, 2013 Problem D. Five Palindromes Input file: input.txt Output file: output.txt Time limit: 2 seconds (3 seconds for Java) Memory limit: 256 mebib

[ACM] POJ 1936 All in All (查找,一个串是否在另一个串中)

All in All Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 27521   Accepted: 11266 Description You have devised a new encryption technique which encodes a message by inserting between its characters randomly generated strings in a clever

C#/WPF 计算字串的真实长度,调整控件的宽度

下面函数是经常用到的计算字串长度的方法: private double MeasureTextWidth(String str, string fontName, double fontsize, double width)        {             double width = -1;                 try            {                System.Drawing.Graphics graphics = System.Drawing

hdu3065 病毒侵袭持续中 AC自动机入门题 N(N &lt;= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。

/** 题目:hdu3065 病毒侵袭持续中 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数. 思路:ac自动机做发,val标记每一个病毒串编号,通过print函数统计每一个病毒出现的次数. AC自动机好文章:http://www.cppblog.com/menjitianya/archi