串的顺序存储的应用实例二
苏格拉底是古希腊著名的哲学家。有一天,他带领几个弟子来到一块麦地
边。那时正是麦子成熟的季节,地里满是沉甸甸的麦穗。苏格拉底对弟子们说:
“你们去麦地里摘一个最大的麦穗,只许进不许退。我在麦地的尽头等你们。”
弟子们陆续走进了麦地。到处都是大麦穗,哪一个才是最大的呢?他们埋
头向前走,看看这一株,摇了摇头;看看那一株,又摇了摇头。虽然有人也曾
试着摘了几穗,但想到前面可能还有更大的,于是就毫不犹豫地把手里的麦穗
扔掉了。
就这样,他们一边低着头往前走,一边用心地挑挑拣拣,经过了很长一段
时间。突然,他们听到苏格拉底苍老的、如同洪钟一般的声音:“你们已经到
头了。”这时两手空空的弟子们才如梦初醒。
苏格拉底对弟子们说:“这块麦地里肯定有一穗是最大的,但你们未必能
碰见它;即使碰见了,也未必能作出准确的判断。因此最大的一穗应该就是你
们刚刚摘下的。
我们从这个故事里,得到弟子们并没有把手中的麦穗和 遇到的麦穗进行比较 ,所以才会造成没有摘到最大的麦穗 , 我们先摘下第一株麦子 ,然后和遇到的麦子进行比较 ,如果比手中的麦子大, 那我们就丢弃手中的麦子 ,然后去摘更大的麦子 ,直到结束 ,我们一定能摘到想要的麦子.
现在我们就引入一个串比较的问题 :
● 问题
• 求出串中 一个 最长的 连续相同的平台
就是最长的连续的字符 ,就像我们找最大麦穗一样 ,逐个对比, 当遇到比当前存储的连续字符上的字符的话,我们就更新最长字符的位置 和 最长字符的长度
● 算法思路
• 循环比较相邻字符
① 若相邻字符相等 , 累加相同字符的长度
② 否则:
更新最长连续相同字符信息
为继续找出做好准备
● 算法实操:
思路其实很简单 ,我们先从第一个元素开始 , 遍历 ,初始长度是0 ,如果遇到相同的元素, 就把相同字符的长度加一 ,如果遇到 不同字符 ,就说明我们此时的相同字符串就断了 , 我们此时有断掉的字符串长度 ,然后和 保存的最长字符串比较 ,如果小于 ,就不更新 ,如果比保存的字符串大 ,就更新最长字符串 ,注意 我们更新的是 最长字符串的开始地址 和 字符串长度 ,
然后我们后续接着遍历 ,下一个字符串 ,寻找最长字符串 ,直到结束
//传入要进行比较的字符串 ,存储最大字符串的开始地址,存储最大的长度的地址
void LongestString(SqString s,int &index,int&max)
{//初始的时候,我们遇到的第一个元素,就默认是最大字符串,所有length标记为1 int length=1;//从开始出发 标记最大字符串开始地址的 start标记为0,从第一个元素开始 下标为0int i=0;int start=0;//刚开始默认最大的字符地址就是第一个数 ,位序为0, 最大的坐标还没有更新,就默认为0index = 0,max = 0;//开始遍历循环 //遍历的长度小于数组长度的时候,就一直循环遍历while (i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

