PhoenixZq
分享是一门艺术~~

题目:找出一个字符串中最长连续相邻子串,比如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;
}

  

posted on 2011-09-19 11:26  PhoenixZq  阅读(8391)  评论(1编辑  收藏  举报