构造回文串问题
子问题定义为区间(i,j)构造回文串即可求得。受黑书对1141题的解答启发想出来的
不过算法真是有待优化
代码:
Source Code
Problem: 1159 | User: jluliuxy | |
Memory: 49404K | Time: 2391MS | |
Language: C++ | Result: Accepted |
- Source Code
#include <iostream> #include <string> using namespace std; void update( char * arr, int begin, int end) { } int main() { int num; cin>>num; string str; cin>>str; int len = num+1; short **arr = new short*[len]; int i; int j; for( i = 0; i < len; i++ ) arr[i] = new short[len]; for( i = 1; i < len; i++ ) arr[i][i-1] = 0; for( i = 0; i < len; i++ ) arr[i][i] = 0; for(int k = 1; k < len-1; k++ ) { for( i = 1; i < len-k; i++ ) { j = i+k; arr[i][j] = 5000; if( str[i-1] == str[j-1] ) { arr[i][j] = ( arr[i][j] > arr[i+1][j-1] ? arr[i+1][j-1] : arr[i][j] ); } else { arr[i][j] = ( arr[i][j] > arr[i+1][j]+1 ? arr[i+1][j]+1 : arr[i][j] ); arr[i][j] = ( arr[i][j] > arr[i][j-1]+1 ? arr[i][j-1]+1 : arr[i][j] ); } } } cout<<arr[1][len-1]<<endl; int g; cin>>g; return 0; }