当前位置: 首页 > news >正文

【数据结构与算法——C语言】“串操作与算法”之“找出最长串及其长度”

目录

  • 1. 实验内容及上机实验所用平台
    • 1.1 实验内容
    • 1.2 实验平台软件
  • 2. 流程图
  • 3. 源代码
  • 4. 用例测试
  • 5. 实验总结

1. 实验内容及上机实验所用平台

1.1 实验内容

【问题描述】
给定两个字符串 s1s2,求最长的 s1 前缀 ss 使得 sss2 的最长后缀,输出该字符串和其长度。
【输入形式】
输入的每个测试用例由两行构成,第一行为 s1,第二行为 s2。你可以假设所有字母都为小写字母。
【输出形式】
每个测试用例的输出由单行组成,其中包含最长的字符串,该字符串是 s1 的前缀和 s2 的后缀,后面跟着该前缀的长度。如果最长的此类字符串是空字符串,则输出应为 0s1s2 的长度最多为 50000
【样例输入】
aaariemann
marjorieaaa
【样例输出】
aaa 3
【样例说明】
输入的第一行字符串s1=‘aaariemann’,第二行字符串s2=‘marjorieaaa’。s1的前缀和s2的后缀最长相等字符串为aaa,因此输出aaa 3,而不是a 1。

1.2 实验平台软件

Dev-C++.

2. 流程图

在这里插入图片描述

3. 源代码

需要先在源代码目录下新建 in.txt 文件,在此文件下输入要测试的数据。

#include <iostream>
#include <string>
using namespace std;void getnext(string t, int *next) {	// 求合并串 t 的 next int j = 0, k = -1, len_t = t.length();next[0] = -1;	// 第一个 next 默认为 -1while (j < len_t) {if (k == -1 || t[j] == t[k]) {	// 若 k 为 -1 或者字符相同,j、k 后移 j++; k++;next[j] = k;}else k = next[k];	// 字符不同时,k 回退 }
}int main() {freopen("in.txt", "r", stdin);string s, t;int i = 0, len_s, len_t, len;while (cin >> s >> t) {cout << "\t第2题 - 找出最长串及其长度\n\n";//cout << "--------------------------------------------------------------\n\n";printf("[%d] 样例输入:%s %s\n\n", ++i, s.c_str(), t.c_str());printf("[%d] 样例输出:", i);len_s = s.length();len_t = t.length();len = len_s + len_t;t = s + t;	// 合并两个串 int *next = new int[len + 1];getnext(t, next);	// 计算合并串 t 的 next 值 while (next[len] > len_s || next[len] > len_t) len = next[len];	// 最长串的长度不能超过给定两个串的任何一个的长度 if (next[len] != 0) {	// 若 next 值不为 0,则输出串 s1 的前缀及其长度 for (int j = 0; j < next[len]; j++) cout << s[j];cout << " " << next[len] << endl;}else cout << "0\n";	// 否则没有找到最长串,输出 0 cout << "\n\n==============================================================\n\n";}cout << "9个样例输出完毕!\n\n";freopen("CON", "r", stdin);	// 为了可直接查看exe可执行文件,需要将权限返回键盘 system("pause");return 0;
}

4. 用例测试

in.txt 的测试用例如下:

clinton
homerriemann
marjorieaaaa
aaaaaaaaababa
cdefababaworkhardwo
woabcdefgfedcba
althoughthisisthetruthfedcbaabcdefabcdefgabcdef
abcdefgabcdefsomeone
thisisaongsentenceselizabethlistenedinsilence,butwasnotconvinced.theirbehaviourattheassemblyhadnotbeencalculatedtopleaseingeneral;andwithmorequicknessofobservationandlesspliancyoftemperthanhersister,andwithajudgment,too,unassailedbyanyattentiontoherself,shewasverylittledisposedtoapprovethem.theywereinfactveryfineladies,notdeficientingoodhumourwhentheywerepleased,norinthepowerofbeingagreeablewheretheychoseit;butproudandconceited.theywereratherhandsome,hadbeeneducatedinoneofthefirstprivateseminariesintown,hadafortuneoftwentythousandpounds,wereinthehabitofspendingmorethantheyought,andofassociatingwithpeopleofrank;andwerethereforeineveryrespectentitledtothinkwellofthemselves,andmeanlyofothers.theywereofarespectablefamilyinthenorthofEngland;acircumstancemoredeeplyimpressedontheirmemoriesthanthattheirbrother'sfortuneandtheirownhadbeenacquiredbytrade.Mr.Bingleyinheritedpropertytotheamountofnearlyanhundredthousandpoundsfromhisfather,whohadintendedtopurchaseanestate,butdidnotlivetodoit.--mr.Bingleyintendeditlikewise,andsometimesmadechoiceofhiscounty;butashewasnowprovidedwithagoodhouseandthelibertyofamanor,itwasdoubtfultomanyofthosewhobestknewtheeasinessofhistemper,whetherhemightnotspendtheremainderofhisdaysatNetherfield,andleavethenextgenerationtopurchase.Hissisterswereveryanxiousforhishavinganestateofhisown;butthoughhewasnowestablishedonlyasatenant,missBingleywasbynomeansunwillingtopresideathistable,norwasmrs.Hurst,whohadmarriedamanofmorefashionthanfortune,lessdisposedtoconsiderhishouseasherhomewhenitsuitedher.mr.bingleyhadnotbeenofagetwoyears,whenhewastemptedbyanaccidentalrecommendationtolookatNetherfieldHouse.Hedidlookatitandintoitforhalfanhour,waspleasedwiththesituationandtheprincipalrooms,satisfiedwithwhattheownersaidinitspraise,andtookitimmediately.
thoughnodispositioncouldofferagreatercontrasttohisown,andthoughwithhisownheneverappeareddissatisfied.

在这里插入图片描述

5. 实验总结

这道题目其实就是找串的 next 值,只要将两个串合并来找就可以了。但是要注意的是 next 值最大的不一定是答案,因为在合并后,可能会使得前缀和后缀相同的长度多余两个串的其中一个的长度,比如两个串的元素都一样。所以还要判断当 next 值多余给定串 s1 或者 s2 的长度后,要进行回溯。

http://www.lryc.cn/news/176720.html

相关文章:

  • 泡泡玛特:一家中国潮玩品牌的出海之旅
  • 淘宝商品sku信息抓取接口api
  • MySQL 多表关系(多表查询 一)
  • 【面试高高手】——JavaIO篇(23题)
  • 图像采集 deep OCR
  • Linux 终端命令总结
  • 中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表
  • 速看!软考中项100条重要知识点集锦!
  • Pycharm在进行debug时出现collecting data如何解决?
  • 【算法分析与设计】算法概述
  • 如何进一步全面提高项目估算精准度?
  • Git学习笔记4
  • 【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)
  • 成都睿趣科技:抖音开通橱窗带货需要钱吗
  • 中间件 - 分布式协调服务Zookeeper
  • golang的实用工具
  • 图层混合模式(三)
  • 蓝牙核心规范(V5.4)10.6-BLE 入门笔记之L2CAP
  • 【计算机网络】DNS原理介绍
  • Docker的基础命令
  • 提取项目依赖包的licenses
  • Vue项目自动转换px为rem-高保真还原设计图
  • rman备份到远程服务器
  • 数据结构与算法
  • 【Web3】DAO相关的基础知识
  • 一文教你学会ArcGIS Pro地图设计与制图系列全流程(3)
  • 用于大规模 MIMO 检测的近似消息传递 (AMP)(Matlab代码实现)
  • 复杂SQL解析
  • js中哪些地方会用到window?
  • KITTI raw_data数据集百度云下载