码迷,mamicode.com
首页 > 其他好文 > 详细

GEEK编程练习— —最长相同的子串

时间:2016-05-03 18:38:20      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

题目

输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及首字符的位置。

输入

yyabcdabjcabceg

输出

abc
3

解析

首先声明一下,假如字符串为aaaaaa,答案应该为aaaaa。两个个等长的子串可以有部分字符重叠。

以abcab为例子分析如下:
首先寻找长度为4的子串,只能是abca和bcab,再查看这两个子串是否有其他相同的子串。有的话直接输出结果并退出程序。
然后寻找长度为3的子串,只能abc,bca,cab。这3个子串都没有其他相同的子串。
最后寻找长度为2的子串,首先是ab,用find函数返回在abcab中正序查找的位置0,用rfind函数返回在abcab中逆序查找的位置3。这两个位置不相等,说明在不同的位置存在相同的子串ab。

代码

#include <iostream>

using namespace std;

pair<int,string> fun(const string &str)
{
    int count = 0;
    string substrs, tep;
    int i, j, len = str.length();
    for(i = len - 1; i >= 1; --i)
    {
        for(j = 0; j <= len - i; j++)
        {
                size_t t = 0;
                size_t num = 0;
                tep = str.substr(j,i);
                t = str.find(tep);
                num = str.rfind(tep);
                if(t != num)
                {
                    count = t + 1;
                    substrs = tep;
                    return make_pair(count, substrs);
                }
        }
    }
    return make_pair(count, substrs);
}
int main()
{
    string str;
    pair<int,string> rs;
    cin >> str;
    rs = fun(str);
    cout << rs.second << endl << rs.first << endl;
    return 0;
}

GEEK编程练习— —最长相同的子串

标签:

原文地址:http://blog.csdn.net/sin_geek/article/details/51297663

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!