找出一个字符串中最长连续相同子串

题目:找出一个字符串中最长连续相邻子串,比如ababcabc,最长连续字串是abc。

分析:第一步,首先定义一个指针pStr定位于字串首部,再定义一个指针qStr指向pStr的下一个,然后qStr++找出与*pStr相同的字符;

第二步,如果找到*qStr==*pStr,则递增两个指针,并计算下相同字符的数目num和这段相同子字符串的index。

第三步,如果*qStr!=*pStr,则设置num=0。接着转向第一步...

第四步,定义一个maxNum和一个maxIndex,记录最长子字符串的长度和位置。如果一个新的num>maxNum,则maxNum=num,maxIndex=index。

复制代码
#include <iostream>
using namespace std;

void FindStr(char* str)
{
    if(str == NULL)
        return;
    
    char* pStr = str;
    char* qStr = str+1;
    char* index = str;
    char* maxIndex = str;
    int num = 0;
    int maxNum = 0;

    while(*pStr != '\0')
    {
        while(*qStr != *pStr){
            num = 0;
            qStr++;
        }

        while(*qStr == *pStr && *pStr !='\0' && *qStr !='\0')
        {
            num++;
            index = pStr;
            qStr++;//千万不要放在if(...)中
            pStr++;
        }

        if(num>=1)
            index = index-num+1;
        if(num > maxNum){
            maxNum = num;
            maxIndex = index;
        }

    //    pStr++;
        qStr = pStr+1;
    }

    cout << "Result: ";
    for(int i=0;i<maxNum;++i)
        cout << *maxIndex++ << ' ';
    cout << endl;
}


int main()
{
    char* str = "abcabcdabcd";
    FindStr(str); 

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值