File tree Expand file tree Collapse file tree 3 files changed +70
-0
lines changed
0516_longest_palindromic_subsequence Expand file tree Collapse file tree 3 files changed +70
-0
lines changed Original file line number Diff line number Diff line change 1+ all :
2+ gcc -O1 -o test lps.c
Original file line number Diff line number Diff line change 1+ #include <stdio.h>
2+ #include <stdlib.h>
3+
4+
5+ static inline int max (int a , int b )
6+ {
7+ return a > b ? a : b ;
8+ }
9+
10+ int longestPalindromeSubseq (char * s )
11+ {
12+ int i , j , k ;
13+ int len = strlen (s );
14+ int * * dp = malloc (len * sizeof (int * ));
15+ for (i = 0 ; i < len ; i ++ ) {
16+ dp [i ] = malloc (len * sizeof (int ));
17+ memset (dp [i ], 0 , len * sizeof (int ));
18+ dp [i ][i ] = 1 ;
19+ }
20+
21+ for (k = 1 ; k < len ; k ++ ) {
22+ for (i = 0 ; i < len - k ; i ++ ) {
23+ j = i + k ;
24+ if (s [i ] == s [j ]) {
25+ dp [i ][j ] = dp [i + 1 ][j - 1 ] + 2 ;
26+ } else {
27+ dp [i ][j ] = max (dp [i ][j - 1 ], dp [i + 1 ][j ]);
28+ }
29+ }
30+ }
31+ return dp [0 ][len - 1 ];
32+ }
33+
34+ int main (int argc , char * * argv )
35+ {
36+ if (argc != 2 ) {
37+ fprintf (stderr , "Usage: ./test s\n" );
38+ exit (-1 );
39+ }
40+
41+ printf ("%d\n" , longestPalindromeSubseq (argv [1 ]));
42+ return 0 ;
43+ }
Original file line number Diff line number Diff line change 1+ #include < bits/stdc++.h>
2+
3+ using namespace std ;
4+
5+ class Solution {
6+ public:
7+ int longestPalindromeSubseq (string s) {
8+ int len = s.length ();
9+ vector<int > dp (len, 1 );
10+ // We have to use level traverse to reduce the dp table size
11+ for (int i = len - 2 ; i >= 0 ; i--) {
12+ int left_down = 0 ;
13+ for (int j = i + 1 ; j < len; j++) {
14+ int down = dp[j];
15+ if (s[i] == s[j]) {
16+ dp[j] = left_down + 2 ;
17+ } else {
18+ dp[j] = max (down, dp[j - 1 ]);
19+ }
20+ left_down = down;
21+ }
22+ }
23+ return dp[len - 1 ];
24+ }
25+ };
You can’t perform that action at this time.
0 commit comments