对称子串的最大长度
2013-04-10 12:44
113 查看
首先写一个判断子串是否对称的函数
最直观的方法就是把所有子串都找出来,选择满足条件的子串长度最大的那个。
很明显这种方法的时间复杂度会很高
可以对这种方法进行优化
我们先判断子字符串A是不是对称的,如果不是对称的,则左右分别延长一个字符也不是对称的。
如果A对称,那么我们只需要判断左右一个字符是不是相等。
//判断子串是否对称 bool isSymmetrical(char *pbegin, char *pend) { if(!pbegin||!pend||pbegin>pend) return false; while(pbegin<pend) { if(*pbegin!=*pend) return false; pbegin++; pend--; } return true; }
最直观的方法就是把所有子串都找出来,选择满足条件的子串长度最大的那个。
很明显这种方法的时间复杂度会很高
int getLongest(char *pString) { if(!pString) return 0; int symmeticalLength=1; //始终保存当前已经找出的最长匹配序列的长度 char *pFirst=pString; int length=strlen(pString); while(pFirst<(pString+length-1)) { char *pLast=pFirst+1; while(pLast<(pString+length)) { if(isSymmetrical(pFirst,pLast)) { int newLength=pLast-pFirst+1; if(newLength>symmeticalLength) symmeticalLength=newLength; } pLast++; } pFirst++; } return symmeticalLength; }
可以对这种方法进行优化
我们先判断子字符串A是不是对称的,如果不是对称的,则左右分别延长一个字符也不是对称的。
如果A对称,那么我们只需要判断左右一个字符是不是相等。
int getLongest2(char *pString) { if(!pString) return 0; int symmeticalLength=1; char *pChar=pString; while(*pChar!='\0') { //按照奇数位进行判断,例如aba char *pFirst=pChar-1; char *pLast=pChar+1; while(pFirst>=pString&&*pLast!='\0'&&*pFirst==*pLast) { pFirst--; pLast++; } int newLength=pLast-pFirst-1; if(newLength>symmeticalLength) symmeticalLength=newLength; //按照偶数为进行判断,例如 abba pFirst=pChar; pLast=pChar+1; while(pFirst>=pString&&*pLast!='\0'&&*pFirst==*pLast) { pFirst--; pLast++; } newLength=pLast-pFirst-1; if(newLength>symmeticalLength) symmeticalLength=newLength; pChar++; } return symmeticalLength; }
相关文章推荐
- 面试题:最长回文子串(即求对称字符串的最大长度 )
- 字符串中对称子串的最大长度
- 字符串中对称子串的最大长度
- 字符串中最大对称子串的长度(C++软件工程师面试题)
- c语言输出字符串中最大对称子串长度的3种解决方案
- c语言输出字符串中最大对称子串长度的3种解决方案
- 输入一个字符串,输出该字符串中最大对称子串的长度
- 求目标字符串最大子串长度
- leetcode_[Python/C++]_3_Longest Substring Without Repeating Characters(不重复子串最大长度)
- (Relax 后缀数组1.4)POJ 2774 Long Long Message(求两个字符串公共子串的最大长度)
- 输入一个字符串,要求找出字符串中最大子串的长度
- 求最大回文子串的长度
- 求对称字符串的最大长度
- 第七十三题(对称字符串的最大长度)
- lc#3求字符串中不包含重复字符的最大长度子串
- 对称字符串的最大长度
- 对称字符串的最大长度
- 程序员面试100题之一:对称字符串的最大长度
- 求字符串中对称的子字符串的最大长度
- 求一个字符串的最长不重复子串的最大长度