Một chuỗi là một palindrome khi nó đọc ngược cũng như đọc xuôi và một chuỗi con là một chuỗi các ký tự liền kề trong chuỗi. Trong bài viết này, chúng ta sẽ thảo luận về nhiều cách tiếp cận để tìm số lượng chuỗi con palindromic trong một chuỗi đã cho như
- Cách tiếp cận vũ phu [cách tiếp cận hai con trỏ]
- phương pháp đệ quy
- Phương pháp lập trình động
- Thuật toán Manacher đã sửa đổi
Hãy để chúng tôi thảo luận về tất cả chúng từng cái một trong bài viết này
Ví dụ.
Đầu vào. str = "bcbbc"
Đầu ra. 8
Giải thích. chuỗi con palindromic.
'b','c','b','b','c','bcb','cbbc','bb'
Đầu vào. str = "eaaebeb"
Đầu ra. 11
Giải thích. chuỗi con palindromic.
'e','a','a','e','b','e','b','eaae','aa','beb','
Trong giải pháp brute force, chúng ta lấy từng chuỗi con theo cách tiếp cận con trỏ và kiểm tra xem nó có phải là một palindrome hay không
Thực hiện
Triển khai phương pháp Brute Force trong C++
#include
#include
using namespace std;
bool isPalindromic[string s, int i, int j]
{
if [i > j]
return 1;
if [s[i] != s[j]]
return 0;
return isPalindromic[s, i + 1, j - 1];
}
int main[] {
string str;
cin>>str;
int count =0;
for[int i=0;i>str;
coutj] return 0;
if[i==j] return 1;
if[dp[i][j]!=-1] return dp[i][j];
if[isPalindrome[str,i,j]] return dp[i][j]=PalindromicSubstrings[i+1,j,str]+ PalindromicSubstrings[i,j-1,str]+1-PalindromicSubstrings[i+1, j-1,str];
else return dp[i][j]= PalindromicSubstrings[i+1,j,str]+ PalindromicSubstrings[i,j-1,str]-PalindromicSubstrings[i+1, j-1,str];
}
int main[] {
string str;
cin>>str;
memset[p,-1,sizeof[p]];
memset[dp,-1,sizeof[dp]];
cout>str;
cout