字符串中最大对称子串的长度(C++软件工程师面试题)
2014-12-07 16:06
330 查看
转载:请注明出处,/article/9411731.html,谢谢!
最近看了一个关于求字符串中最大对称子串的长度的比较有意思的算法,与大家分享一下!
思路:借用next数组防止回朔比较,例如:字符串str:"abcxxxxxcbvvvvv",它对应的next数组值:
将“死磕类”的算法时间复杂度提高到O(n)。与KMP的next异曲同工O(∩_∩)O~,只可惜至今没有理解KMP!
最近看了一个关于求字符串中最大对称子串的长度的比较有意思的算法,与大家分享一下!
思路:借用next数组防止回朔比较,例如:字符串str:"abcxxxxxcbvvvvv",它对应的next数组值:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
str: | a | b | c | x | x | x | x | x | c | b | v | v | v | v | v |
next: | 1 | 1 | 1 | 1 | 2 | 3 | 4 | 5 | 7 | 9 | 1 | 2 | 3 | 4 | 5 |
#include<iostream> using namespace std; /**************************************************** *******@Author仁子欣****2014年12月7号**************** 功能:输入一个字符串,输出该字符串中最大对称子串的长度 例如:"abacc"返回3,"a"返回1,abb返回4; 输入:字符串str 返回:int最大对称子串的长度 *****************************************************/ int StrSymmetricCounts(const char* str); int main() { char* str="abcxxxxxxxxccccc"; printf("源字符串为:%s\n",str); int len = StrSymmetricCounts(str); printf("最大对称子串长度:%d\n",len); return 0; } int StrSymmetricCounts(const char* str) { if(str==NULL)return-1; int len=strlen(str); int maxlen=1; int next[30];//next数组类似KMP中的next数组 next[0]=1; int i=1; while(i<len) { int max=1; if((i-next[i-1]-1)>=0 && str[i]==str[i-next[i-1]-1]) {//通过next数组回退比较 max = max > (next[i-1]+2) ? max: (next[i-1]+2); } int k=1; while(str[i]==str[i-k])//如果字符串的数组相邻的相等 k++; max = max > k?max: k; next[i]=max;//将next数组进行赋值 cout<<"next["<<i<<"]="<<next[i]<<"; "<<endl; if(next[i]>maxlen) { maxlen=next[i]; } i++; } return maxlen; }
相关文章推荐
- 面试题:最长回文子串(即求对称字符串的最大长度 )
- c语言输出字符串中最大对称子串长度的3种解决方案
- 面试题12:字符串无重复子串的最大长度
- c语言输出字符串中最大对称子串长度的3种解决方案
- 字符串中对称子串的最大长度
- 字符串中对称子串的最大长度
- 输入一个字符串,输出该字符串中最大对称子串的长度
- 面试题5:求字符串中回文子串的最大长度
- 对称字符串的最大长度
- 找出字符串中对称的子字符串的最大长度(最长回文)
- 计算一个字符串中最大的子串的长度,并将它返回。如“abc12345sdfsasdfsd”最大的子串是sdfsasdfsd
- 字符串中对称字符串的最大长度(最长回文)
- 求对称字符串的最大长度
- 给你一个字符串,找出该字符串中对称的子字符串的最大长度。
- 找出字符串中对称的子字符串的最大长度(最长回文)
- 对称子串的最大长度
- 获取最大长度存在巅倒字符串的子串
- zoj Rescue the Rabbit AC自动机+状态压缩DP n个有价值的子串,求长度为len的字符串的最大值(每子串的值最多用一次)
- 输入一个字符串,要求找出字符串中最大子串的长度
- 找出字符串中对称的子字符串的最大长度(最长回文)