不包含任何迴文子串的最長子串長度
在 C++ 中,我們有預定義函式 max(),它將用於查詢任何包含任何迴文的最長子串。迴文串是一組字元,即使在反轉後也保持不變。
讓我們舉一個迴文串的例子,以找到最長的非迴文子串。
字串malayalam本身就是一個迴文,但我們需要識別最長的非迴文子串。當我們將字串malayalam(長度=9)更改為alayalam時,我們得到最長的非迴文子串長度,即 8。
字串synapse是一個非迴文串,其長度為 7。
語法
程式中使用以下語法:
substr( size_a position, size_a length )
引數
size_a - 整數型別。
position - 要複製的位置的第一個字元。
Length - 子串的長度。
var_name = max( var_name, size_a length)
引數
var_name - 變數的名稱。
size_a - 整數型別。
length - 子串的長度。
演算法
我們將建立一個名為“isPalindrome”的全域性函式,並將字串's'作為引數傳遞給該函式。
在全域性函式“isPalindrome”中,我們正在計算輸入字串“s”的長度並將其儲存在一個名為“n”的變數中,並使用 for 迴圈迭代字串字元“s”從第一個字元到中間字元。
然後,我們將建立一個 if 語句來檢查“(i)-th”和“(num-i-1)-th”字元是否相等,如果它是迴文則返回 false,否則返回 true。
在主函式中,我們將定義變數“str”並將輸入字串儲存在其中。然後找到“str”的長度並將其儲存在另一個名為“n”的變數中。
我們正在一個整數變數“answer”中儲存 0,因為它將用於查詢非迴文子串的長度。
開始兩個巢狀的for迴圈以迭代 str 的所有可能的子字串。
在第二個 for 迴圈下使用 if 語句為每個子字串呼叫上面名為“isPalindrome”的函式。
我們藉助預定義函式 max(關聯步驟 5)查詢最長非迴文子串的長度。
最後,for巢狀迴圈計數器將檢查子字串是非迴文還是迴文,然後列印非迴文字串的最長子串的長度。
示例
在此示例中,我們遵循上述演算法的整個方法來學習如何查詢不包含迴文的最長子串的長度。
#include<iostream>
#include<algorithm>
using namespace std;
bool isPalindrome(string s) {
int n = s.length();
for (int i = 0; i < n/2; i++) {
if (s[i] != s[n-i-1]) {
return false;
}
}
return true;
}
int main() {
string str = "madam";
// “madam” string is itself a palindrome but its longest substring check so that it doesn’t become a palindrome and give its length in the output.
int n = str.length();
int answer = 0;
for (int i = 0; i < n; i++) {
for (int j = i+1; j <= n; j++) {
if (!isPalindrome(str.substr(i, j-i))) {
answer = max(answer, j-i);
// return the maximum length of non-palindrome substring.
}
}
}
cout << "The length of longest substring that does not contain any palindrome: "<<answer << endl;
return 0;
}
輸出
The length of longest substring that does not contain any palindrome: 4
結論
我們探討了查詢不包含任何迴文的最長子串長度的概念。我們的分析觀察到,可以透過將其分解成更小的子問題來解決此問題。這也是一個現實生活中的問題,在自然語言處理和生物資訊學等領域具有實際應用。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP