Given a string S of length n and a positive integer k. The task is to find number of Palindromic Subsequences of length k.
Examples:
Input : s = "aabab", k = 2
Output : 4
Input : s = "aaa", k = 3
Output : 1
Input: s= "abdbcabda",k=4
Output : 6
# | User | Rating |
---|---|---|
1 | Benq | 3783 |
2 | jiangly | 3710 |
3 | tourist | 3662 |
4 | Um_nik | 3526 |
5 | ko_osaga | 3500 |
6 | maroonrk | 3488 |
7 | ecnerwala | 3478 |
8 | inaFSTream | 3477 |
9 | fantasy | 3470 |
10 | QAQAutoMaton | 3428 |
# | User | Contrib. |
---|---|---|
1 | Um_nik | 185 |
2 | adamant | 177 |
2 | awoo | 177 |
4 | nor | 169 |
5 | maroonrk | 165 |
6 | -is-this-fft- | 164 |
7 | antontrygubO_o | 155 |
8 | ko_osaga | 151 |
8 | dario2994 | 151 |
10 | SecondThread | 148 |
Given a string S of length n and a positive integer k. The task is to find number of Palindromic Subsequences of length k.
Examples:
Input : s = "aabab", k = 2
Output : 4
Input : s = "aaa", k = 3
Output : 1
Input: s= "abdbcabda",k=4
Output : 6
Name |
---|
dp[i][j][k] = (s[i] == s[j]) * dp[i + 1][j — 1][k — 1] + dp[i + 1][j][k] + dp[i][j — 1][k] — dp[i + 1][j — 1][k]
thanks a lot.What would be its time complexity O(n*k)?
O(n*n*k)
Wouldn't it be: "dp[i][j][k] = (s[i] == s[j]) * dp[i + 1][j — 1][k — 2] + dp[i + 1][j][k] + dp[i][j — 1][k] — dp[i + 1][j — 1][k]"?
This is the correct relation imo.
Let me explain it further.
dp[i][j][k]
means the number of palindromic subsequences of size k that occur between i and j (inclusive)So if
s[i]==s[j]
, this would mean that the corner elements are same at theith
and thejth
index, so we multiply it withdp[i+1][j-1][k-2]
(this means that we excludeith
andjth
index and find the number of palindromic subsequences of sizek-2
fromi+1
toj-1
indices).Again we add
dp[i][j-1][k]
anddp[i+1][j][k]
and subtractdp[i+1][j-1][k]
from it which is self explanatory.Number of palindromic subsequences of size 1 between
i
&j
will bej-i+1
( as all strings of size 1 are palindrome) Number of palindromic subsequences of size 0 betweeni
&j
will be 1 Number of palindromic subsequences of size 2 wheni+1==j
andith
and jth character are equal will be 1 else it will be 0Can you also tell why to subtract dp[i+1][j-1][k] ? Is it because when we fo to i+1,j and i,j-1 we will double count it i+1,j-1 so to cancel it we are subtracting?
Yes