热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++实现寻找最长连续重复子串

本文介绍了一个使用C++编写的算法,用于从给定的字符串中找出最长的连续重复子串。例如,对于输入字符串“ababc”,算法将返回“ab”。文中不仅提供了详细的代码实现,还分析了算法的时间和空间复杂度。

#include
#include
using namespace std;
/*
问题描述:给定一个字符串,如“ababc”,目标是找出其中最长的连续重复子串。本示例中,答案应为“ab”,因为它连续重复出现且长度最长。
下面通过C++语言编写一个函数来解决这个问题,并对算法的复杂度进行简要分析。
*/
struct SubStringInfo
{
int maxLength; // 存储最长重复子串的长度
string longestSubStr; // 存储最长重复子串
} subStrInfo;
bool isContinuous(string &mainStr, string subStr) // 判断子串是否在主串中连续重复出现
{
if (mainStr.length() == subStr.length()) return false;
size_t pos = mainStr.find(subStr); // 查找子串首次出现的位置
if (pos == string::npos) return false; // 如果未找到,则返回false
size_t nextPos = mainStr.find(subStr, pos + subStr.length()); // 查找下一个匹配位置
if (nextPos == pos + subStr.length()) return true; // 如果下一个位置正确,则说明连续重复
return false;
}
void findLongestContinuousSubStr(SubStringInfo &info, string &inputStr)
{
int strLen = inputStr.length();
for (int len = 1; len <= strLen / 2; ++len) // 遍历所有可能的子串长度(不超过总长度的一半)
{
for (int start = 0; start <= strLen - len; ++start) // 遍历所有起始位置
{
string subStr = inputStr.substr(start, len); // 获取当前子串
if (isContinuous(inputStr, subStr)) // 检查是否连续重复出现
{
if (len > info.maxLength) // 更新最长子串信息
{
info.maxLength = len;
info.lOngestSubStr= subStr;
}
}
}
}
}
int main()
{
subStrInfo.maxLength = 0; // 初始化结构体成员
subStrInfo.lOngestSubStr= "";
string inputStr;
cout <<"请输入一个字符串: ";
cin >> inputStr;
findLongestContinuousSubStr(subStrInfo, inputStr);
cout <<"最长的连续重复子串为: " < return 0;
}


推荐阅读
  • 快速排序是基于分治策略的一种排序算法,其平均时间复杂度为O(n log n),在大多数情况下表现优于其他排序算法。本文将详细介绍快速排序的工作原理,并提供一个Java语言的具体实现。 ... [详细]
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 本文章介绍了如何将阿拉伯数字形式的金额转换为中国传统的大写形式,适用于财务报告和正式文件中的金额表示。 ... [详细]
  • 本文探讨了如何在Django中创建一个能够根据需求选择不同模板的包含标签。通过自定义逻辑,开发者可以在多个模板选项中灵活切换,以适应不同的显示需求。 ... [详细]
  • 本文详细探讨了 Java 中状态模式与策略模式的核心差异,旨在帮助开发者在实际应用中准确选择和运用这些设计模式。 ... [详细]
  • C++编程基础:探索自定义数据类型
    本文继续深入C++编程的基础知识,重点讲解自定义数据类型的概念及其应用,包括枚举类型、结构体和联合体等。 ... [详细]
  • Flutter 高德地图插件使用指南
    本文档详细介绍了如何在Flutter项目中集成和使用高德地图插件,包括安装、配置及基本使用方法。 ... [详细]
  • 本文探讨了URL在网络通信中的作用及其结构,重点介绍了如何在iOS中使用URLComponents类解析URL,并讨论了URL在应用间跳转和本地文件访问中的应用。 ... [详细]
  • 本文探讨了如何利用自定义URI方案和注册表编辑,在Windows操作系统中实现从Web浏览器启动本地应用程序的方法,同时强调了这一过程中的安全考虑。 ... [详细]
  • Android实战:使用ProgressBar与AsyncTask实现数据异步加载
    本文介绍如何利用ProgressBar和AsyncTask在Android应用中实现数据的异步加载。包括加载数据的不同状态下的UI展示,如加载中、加载成功及加载失败时的界面处理。 ... [详细]
  • Java中String对象的多种创建与使用方法详解
    本文详细介绍了Java中创建String对象的几种常见方式,包括直接使用双引号、通过new关键字、以及不同创建方式组合使用时的特点和注意事项。同时,文章还探讨了这些创建方式对内存的影响,特别是它们如何影响常量池和堆空间。 ... [详细]
  • 本文介绍了如何通过实现Runnable接口并利用静态代理模式来创建多线程程序。主要内容包括自定义类、代理类的设计以及它们如何共同实现Runnable接口。此外,还将探讨Callable接口作为另一种实现多线程的方法。 ... [详细]
  • Delphi 10.4.2 版本现已进入内测阶段,此次更新不仅增强了现有功能,还引入了多项新技术以提升用户体验。新版本将支持最新的MSIX应用打包格式,改善Windows 10应用商店的部署体验;同时,新增的VCL控件将带来更加现代的用户界面设计。 ... [详细]
  • DP:InitiallyIthinkof1DDP,dp[i]standsfortheshorteststringoffirsticharacters,then:dp[i]minLe ... [详细]
  • 在 iOS 应用开发中,吸引用户的动画往往不是简单的线性运动。本文将探讨不同类型的动画曲线,如加速减速、弹性动画以及不规则路径动画等,并提供详细的实现方法。 ... [详细]
author-avatar
苏木影子Hc_657
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有