[算法]输入一行字符串,找出其中出现的相同且长度最长的字符串

  输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它以及首字符的位置,例如“yyabcdabjcabceg”,输出结果应该是abc,3

可以使用后缀数组来解决

  yyabcdabjcabceg

  yabcdabjcabceg

  abcdabjcabceg

  bcdabjcabceg

  cdabjcabceg

  dabjcabceg

  abjcabceg

  bjcabceg

  jcabceg

  cabceg

  abceg

  bceg

  ceg

  eg

  g

比较相邻后缀字符串前驱即可

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str,rep;
    cin>>str;
    for (unsigned int i = str.length(); i > 1; --i)
    {
        for (unsigned int j = 0; j < str.length(); ++j)
        {
            if(j + i <= str.length())
            {
                size_t t = 0;
                size_t num = 0;
                rep = str.substr(j,i);
                t = str.find(rep);
                num = str.rfind(rep);
                if(t!=num)
                {
                    cout<<rep<<" "<<t+1<<endl;
                    return 0;
                }
            }
        }
    }
    return 0;
}

参考《程序员面试宝典》第二版

你可能感兴趣的:(字符串)