线上教育课程的网络营销方式成都关键词优化
目录
- 1. 实验内容及上机实验所用平台
 - 1.1 实验内容
 - 1.2 实验平台软件
 
- 2. 流程图
 - 3. 源代码
 - 4. 用例测试
 - 5. 实验总结
 
1. 实验内容及上机实验所用平台
1.1 实验内容
【问题描述】
 给定两个字符串 s1 和 s2,求最长的 s1 前缀 ss 使得 ss 为 s2 的最长后缀,输出该字符串和其长度。
 【输入形式】
 输入的每个测试用例由两行构成,第一行为 s1,第二行为 s2。你可以假设所有字母都为小写字母。
 【输出形式】
 每个测试用例的输出由单行组成,其中包含最长的字符串,该字符串是 s1 的前缀和 s2 的后缀,后面跟着该前缀的长度。如果最长的此类字符串是空字符串,则输出应为 0。s1 和 s2 的长度最多为 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 的长度后,要进行回溯。
