पैलिंड्रोम अनुक्रम:
एक स्ट्रिंग अनुक्रम को पैलिंड्रोम अनुक्रम कहा जाता है यदि यह आगे और पीछे से समान पढ़ा जाए। उदाहरण के लिए, 'aba', 'madam', 'did' सभी वैध पैलिंड्रोम अनुक्रम हैं।
हमें एक JavaScript फ़ंक्शन लिखना है जो एक स्ट्रिंग को पहली और एकमात्र आर्ग्युमेंट के रूप में लेता है। इनपुट स्ट्रिंग में केवल 'a', 'b', 'c' और 'd' होने की गारंटी है। फ़ंक्शन को स्ट्रिंग में आने वाले सभी सन्निकट या असन्निकट पैलिंड्रोम सबसीक्वेंस की संख्या गिनकर वापस करनी चाहिए।
उदाहरण
यदि इनपुट स्ट्रिंग है:
const str = 'bccb';
तो आउटपुट होना चाहिए:
const output = 6;
क्योंकि यहां पैलिंड्रोम स्ट्रिंग हैं: 'b', 'c', 'bb', 'cc', 'bcb', 'bccb'
कोड
const str = 'bccb'; const countPalindromes = (str = '') => { let base = 1000000007; const dp = Array(str.length).fill([]); for (let l = 1; l <= str.length; l ++) { for (let i = 0; i + l - 1 < str.length; i ++) { let j = i + l - 1; if (l === 1) { dp[i][j] = 1; continue; } if (l === 2) { dp[i][j] = 2; continue; } if (str[i] === str[j]) { let left = i + 1, right = j - 1; while (left <= right && str[left] != str[i]) { left ++; } while (left <= right && str[right] != str[i]) { right --; } if (left > right) { dp[i][j] = dp[i + 1][j - 1] * 2 + 2; } else if (left === right) { dp[i][j] = dp[i + 1][j - 1] * 2 + 1; } else { dp[i][j] = dp[i + 1][j - 1] * 2 - dp[left + 1][right - 1]; } } else { dp[i][j] = dp[i][j - 1] + dp[i + 1][j] - dp[i + 1][j - 1]; } dp[i][j] = dp[i][j] < 0? dp[i][j] + base : dp[i][j] % base; } } return dp[0][str.length - 1]; }; console.log(countPalindromes(str));आउटपुट
कंसोल में आउटपुट होगा:
6