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 | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 150 |
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