知识大全 数据结构考研分类复习真题 第四章 答案[14]

Posted 长度

篇首语:白日放歌须纵酒,青春作伴好还乡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第四章 答案[14]相关的知识,希望对你有一定的参考价值。

   [题目分析]设以字符数组s表示串 重复子串的含义是由一个或多个连续相等的字符组成的子串 其长度用max表示 初始长度为 将每个局部重复子串的长度与max相比 若比max大 则需要更新max 并用index记住其开始位置

  int LongestString(char s[] int n)//串用一维数组s存储 长度为n 本算法求最长重复子串 返回其长度   int index= max= ;//index记最长的串在s串中的开始位置 max记其长度  int length= i= start= ;//length记局部重复子串长度 i为字符数组下标  while(i<n )  if(s[i]==s[i+ ]) i++; length++;  else //上一个重复子串结束  if(max<length) max=length; index=start; //当前重复子串长度大 则更新max  i++;start=i;length= ;//初始化下一重复子串的起始位置和长度    printf( 最长重复子串的长度为%d 在串中的位置%d\\n max index);  return(max);  //算法结束

  [算法讨论]算法中用i<n 来控制循环次数 因C数组下标从 开始 故长度为n的串 其最后一个字符下标是n 当i最大为n 时 条件语句中s[i+ ]正好是s[n ] 即最后一个字符 子串长度的初值数为 表示一个字符自然等于其身

  算法的时间复杂度为O(n) 每个字符与其后继比较一次

cha138/Article/program/sjjg/201311/22613

相关参考