Skip to content

Commit 359b9ba

Browse files
authored
Update 2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences.cpp
1 parent 369f9ad commit 359b9ba

1 file changed

Lines changed: 25 additions & 41 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -1,60 +1,44 @@
1-
class Solution {
2-
int dp[1<<12];
1+
class Solution {
32
unordered_map<int,int>memo;
43
public:
5-
bool isPalin(string&s, int state)
4+
int lp(string&s, int state)
65
{
76
if (memo.find(state)!=memo.end())
87
return memo[state];
9-
10-
vector<int>idx;
11-
int n = s.size();
12-
for (int i=0; i<n; i++)
8+
9+
string t;
10+
for (int i=0; i<s.size(); i++)
1311
{
1412
if ((state>>i)&1)
15-
idx.push_back(n-1-i);
13+
t.push_back(s[s.size()-1-i]);
1614
}
17-
reverse(idx.begin(), idx.end());
18-
19-
int i=0, j=idx.size()-1;
20-
while (i<j)
21-
{
22-
if (s[idx[i]]!=s[idx[j]])
15+
16+
int n = t.size();
17+
vector<vector<int>>dp(n, vector<int>(n));
18+
for (int i=0; i<n; i++)
19+
dp[i][i] = 1;
20+
for (int len=2; len<=n; len++)
21+
for (int i=0; i+len-1<n; i++)
2322
{
24-
memo[state]=0;
25-
return false;
26-
}
27-
i++;
28-
j--;
29-
}
30-
memo[state]=1;
31-
return true;
23+
int j = i+len-1;
24+
if (t[i]==t[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+
memo[state] = dp[0][n-1];
31+
return dp[0][n-1];
3232
}
3333

3434

3535
int maxProduct(string s)
3636
{
3737
int n = s.size();
38-
39-
for (int state=1; state<(1<<n); state++)
40-
{
41-
int t = __builtin_popcount(state);
42-
if (isPalin(s, state))
43-
{
44-
dp[state] = t;
45-
continue;
46-
}
47-
for (int i=0; i<n; i++)
48-
{
49-
if ((state>>i)&1)
50-
dp[state] = max(dp[state], dp[state-(1<<i)]);
51-
}
52-
}
53-
5438
int all = (1<<n)-1;
5539
int ret = 0;
56-
for (int subset=1; subset<(1<<n); subset++)
57-
ret = max(ret, dp[all-subset]*dp[subset]);
58-
return ret;
40+
for (int subset=1; subset<(1<<n)-1; subset++)
41+
ret = max(ret, lp(s, all-subset)*lp(s, subset));
42+
return ret;
5943
}
6044
};

0 commit comments

Comments
 (0)