最长回文(通过比较原字符串和其翻转字符串)
// zuichanghuiwen.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<string> #include<stack> using namespace std; void palindrome(string str) { stack<char> sta; //翻转字符串 for (int i = 1; i < str.length(); i++) sta.push(str[i]); string str2(str.length(),'\0'); for (int i = 1; i < str.length(); i++) { str2[i] = sta.top(); sta.pop(); } int m = str.length()-1; //求愿字符串与翻转字符串的最长公共子序列 int n = str2.length()-1; int c[20][20]; for (int i = 1; i <= m; i++) c[i][0] = 0; for (int j = 0; j <= n; j++) c[0][j] = 0; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) if (str[i] == str2[j]) { c[i][j] = c[i - 1][j - 1]+1; } else c[i][j] = 0; int max = 0, maxi = 0,maxj=0; //重建最大子序列 for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) if (c[i][j] > max) { max = c[i][j]; maxi = i; maxj = j; } for (int i = maxi - max + 1; i<= maxi; i++) cout << str[i]; } int main() { string str("adhjgasddsa"); palindrome(str); while (1); return 0; }