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 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 156 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
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?
https://ideone.com/g8Xu15