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

给定一行字符串,目标是找到其中最长的相同子串并输出,以及其首字符的位置。若存在多个等长子串,需考虑部分字符重叠的情况。通过逐次查找不同长度的子串,并检查它们的重复性来实现解决方案。
摘要由CSDN通过智能技术生成

题目

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

输入

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)
{
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值