依然是最长回文子串 9OJ-1528
来源:互联网 发布:比较可靠的网络兼职 编辑:程序博客网 时间:2024/06/05 17:46
1528编号的9oj,回文问题。这个题用比较好的动态规划法的话会出现内存溢出,因为输入的字符串长度太长了。表示状态量的二维数组存不下。
换成最直观的办法反倒AC了。就是:依次以每一个字符为回文中心往两端扩大判断,依次以两个相同的字符为中心往两端扩大判断。
#include <stdio.h>#include <malloc.h>#include <string.h>#define N 200000int LongestPalindrome(char* a){if(a==NULL)return 0;int len = strlen(a);int max=1;int left, right;for(int i=1;i<len;i++){left = i-1;right = i+1;while(left>=0 && right<len){if(a[left] == a[right]){if (right - left + 1 > max)max = right - left + 1;left--;right++;}elsebreak;}if(a[i-1]==a[i]){left = i-1;right = i;while(left>=0 && right<len){if(a[left] == a[right]){if (right - left + 1 > max)max = right - left + 1;left--;right++;}elsebreak;}}}return max;}int main(){char a[N];int result;while(scanf("%s",a)!=EOF){result = LongestPalindrome(a);printf("%d\n", result);}return 1;}
同样的方法,数据类型改成了string类型,AC了leetcode的《Longest Palindromic Substring》。
#include <cstdio>#include <iostream>#include <string>using namespace std;#define N 200string LongestPalindrome(string s){if(s == "")return 0;int len = s.length();int max=1, max_left=0, max_right=0;int left, right;for(int i=1;i<len;i++){left = i-1;right = i+1;while(left>=0 && right<len){if(s[left] == s[right]){if (right - left + 1 > max){max_left = left;max_right = right;max = right - left + 1;}left--;right++;}elsebreak;}if(s[i-1]==s[i]){left = i-1;right = i;while(left>=0 && right<len){if(s[left] == s[right]){if (right - left + 1 > max){max_right = right;max_left = left;max = right - left + 1;}left--;right++;}elsebreak;}}}string re;string tmp;for(int j=max_left; j<=max_right; j++){tmp = s[j];re.append(tmp);}return re;}int main(){string a;string result;while(cin>>a){result = LongestPalindrome(a);cout<<result<<endl;}return 1;}
注意:string类型和char*类型在长度计算、判空、定义、赋值、结尾字符、头文件上的区别!
- 依然是最长回文子串 9OJ-1528
- 九度OJ 1528 最长回文子串 -- Manacher算法
- 九度oj 1528 最长回文子串
- 南邮 OJ 1100 最长回文子串
- LeetCode OJ 之 Longest Palindromic Substring (最长回文子串)
- 南邮 OJ 1968 最长回文子串的长度
- LeetCode OJ-5.Longest Palindromic Substring(最长回文子串)
- 广师oj 2238 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 辗转相除法GCD求最大公约数
- C++中应用和指针
- ubuntu下配置tftp服务
- 计算机网络(第二版)--清华大学出版社课后习题答案
- 从软盘启动并读取指定文件内容到指定位置内存
- 依然是最长回文子串 9OJ-1528
- C# CLR
- location proxy_pass的学习资料
- C/C++中二维数组和指针关系分析
- JavaSwing图形界面编程之画图程序
- 【Linux软件安装】Ubuntu 12.04:Arduino IDE
- iOS: Touch Demo
- Silverlight使用XmlReader读取XML数据到TreeView中
- 网络编程