zoukankan      html  css  js  c++  java
  • 给一个字符串,求重复出现且最长的子字符串

    例如”ababc",要求返回"ab"。因为"ab”连续重复出现且最长。用C/C++语言写一个函数完成该算法

     1 void GetSub(char* str)
     2 
     3 {
     4 
     5 char *p,*q,*temp;
     6 
     7 p = str;
     8 
     9 q = p + 1;
    10 
    11 int len = 0;//记录连续重复子串的长度
    12 
    13 int max = 0;//记录连续重复子串的最大长度
    14 
    15 char data[100];//临时数组,用于保存最长重复子串
    16 
    17  
    18 
    19 while(*p != '')
    20 
    21 {
    22 
    23 temp = p;
    24 
    25 while(*q != '')
    26 
    27 {
    28 
    29 if(*q != *p)
    30 
    31     q++;
    32 
    33 else
    34 
    35 {
    36 
    37 len++;//长度自加
    38 
    39 p++;//指针后移
    40 
    41 q++;
    42 
    43 }
    44 
    45 }
    46 
    47 if(len > max)
    48 
    49 {
    50 
    51 i = 0;
    52 
    53 max = len;
    54 
    55 len = 0;
    56 
    57 while(temp != p)
    58 
    59 {
    60 
    61 data[i] = *temp;
    62 
    63 temp++;
    64 
    65 i++;
    66 
    67 }
    68 
    69 }
    70 
    71 p++;
    72 
    73 q = p + 1;
    74 
    75 }
    76 
    77 data[i] = '';//字符数组的最后一个元素需要设置为''
    78 
    79 }</span>
  • 相关阅读:
    扩展欧几里得算法
    单源最短路径—Dijkstra算法
    欧拉定理,费马小定理
    欧拉函数
    Trie 字典树
    平衡树——Treap,Splay
    NOI2009 开关
    银河英雄传说
    线段树与延迟标记
    c++常见变量的极值
  • 原文地址:https://www.cnblogs.com/atong/p/3552461.html
Copyright © 2011-2022 走看看