对称子字符串最大长度
2013-07-18 17:35
281 查看
前言
之前写了一篇文章,判断回文字串,见链接:http://blog.csdn.net/zinss26914/article/details/8063753, 确实写的够烂,欢迎吐槽。这次分享一个在O(n * n)时间复杂度内求对称字符串最大长度的代码判断回文
先重写一个判断回文字串的方法,用指针实现,而不是数组了#include <stdio.h> #include <stdlib.h> #include <string.h> void isSymmetrical(char *str) { char *begin, *end; int flag, len = strlen(str); for (begin = str, end = str + len - 1, flag = 1; begin <= end; begin ++, end --) { if (*begin != *end) { flag = 0; break; } } if (flag) printf("Yes!\n"); else printf("No!\n"); } int main(void) { char str[1001]; while (gets(str)) { isSymmetrical(str); } return 0; } /************************************************************** Problem: 1192 User: wangzhengyi Language: C Result: Accepted Time:10 ms Memory:912 kb ****************************************************************/
判断回文子串
判断子串是否为回文,可以考虑从内向外比较。例如字符串“google”,如果我们判断第二个字符o是对称的,只需要再向左、和向右各移一位就可以判断下一个字符串是否是对称的了需要注意的一点是,针对原字符串中的每一个字符有两种情况:
以该字符为中心的对称分布,也就是回文子串为奇数
以该字符和该字符前一个字符为中心的对称分布,也就是说回文子串是偶数
时间复杂度分析:
外层需要n - 1层循环,内层对于每个字符,都由中间向两边遍历一遍,为n,因此总的时间复杂度为O(n * n)
题目
题目描述: 输入一个字符串,输出该字符串中对称的子字符串的最大长度。 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。 输入: 存在多组数据,每组数据一行字符串,长度不大于100。 输出: 输出回文子串的最大长度。 样例输入: google 样例输出: 4
ac代码
#include <stdio.h> #include <string.h> #include <stdlib.h> /** * 最长回文字串的长度 */ void maxSymmetricalSubstring(char *str) { int maxlength, len; char *pre, *next, *current; current = str + 1; maxlength = 0; while (*current != '\0') { pre = current - 1; next = current + 1; while (pre >= str && *next != '\0' && *pre == *next) { pre --; next ++; } len = (next - 1) - (pre + 1) + 1; if (len > maxlength) { maxlength = len; } pre = current - 1; next = current; while (pre >= str && *next != '\0' && *pre == *next) { pre --; next ++; } len = (next - 1) - (pre + 1) + 1; if (len > maxlength) { maxlength = len; } current ++; } printf("%d\n", maxlength); } int main(void) { char str[101]; while (gets(str)) { maxSymmetricalSubstring(str); } return 0; } /************************************************************** Problem: 1252 User: wangzhengyi Language: C Result: Accepted Time:0 ms Memory:912 kb ****************************************************************/
相关文章推荐
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 【编程题目】对称子字符串的最大长度 ★
- 求对称子字符串的最大长度
- 使用C语言提取子字符串及判断对称子字符串最大长度
- 算法: 求一个字符串中对称子字符串的最大长度即最长回字符串
- 46. 对称子字符串的最大长度(ToDo)
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 程序员面试100题之四十六,对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 程序员面试题精选100题(46)-对称子字符串的最大长度[算法]
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 对称子字符串的最大长度(程序员面试题精选100题)
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 数据结构练习(34)对称子字符串的最大长度