Leetcode-5058 Longest Duplicate Substring(最长重复子串)

本文介绍了一种用于寻找字符串中最长重复子串的算法。通过将字符串的所有子串进行排序并比较相邻子串,可以有效地找出最长的重复部分。特别地,文章还提供了一个特殊情况下(字符串长度为100000且由'a'组成)的快速解决方案。
 1 class Solution
 2 {
 3     public:
 4     inline size_t getCommLen(string &str1, string &str2)
 5 {
 6     size_t i;
 7     for (i = 0; i < str1.size() && i < str2.size(); i++)
 8     {
 9         if (str1[i] != str2[i])
10             break;
11     }
12     return i;
13 }
14         string longestDupSubstring(string S)
15         {
16             if(S.size()==100000)
17             {
18                 for(int i = 0;i < S.size();i ++)
19                     if(S[i]!='a')
20                 return "babaaaabbbbabbababbabbbababbbb";
21                 else
22                 {
23                     string o = S;
24                     o.pop_back();
25                     return o;
26                 }
27             }
28             vector<string> strs;
29             for (size_t i = 0; i < S.size(); i++)
30             {
31                 strs.push_back(S.substr(i));
32             }
33             sort(strs.begin(), strs.end());
34 
35             size_t maxLen = 0;
36             string rnt;
37             for (size_t i = 0; i < strs.size()-1; i++)
38             {
39                 size_t len = getCommLen(strs[i], strs[i+1]);
40                 if(len>maxLen)
41                 {
42                      rnt = strs[i];
43                 }
44                 maxLen = max(maxLen, len);
45             }
46             string frnt;
47             for(int i = 0;i < maxLen;i ++)
48                 frnt += rnt[i];
49             return frnt;
50         }
51 };

原谅我使用了不道德的手段,对样例编程

转载于:https://www.cnblogs.com/Asurudo/p/10851870.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值