無限字串前 N 個字元中僅包含數字 4 的最長子字串
介紹
在本教程中,我們將實現一種方法,利用無限字串的前 N 個字元來查詢僅包含數字 4 的最長子字串。無限字串使用數字 4,看起來像這樣:“44444444……”,對於此字串,我們定義了要考慮的字元長度以解決任務。為了解決本教程的問題,請考慮一個輸入數字字串,我們將使用以下兩個條件來解決此問題:
考慮一個包含隨機數字的輸入字串,並從該字串中生成僅包含數字 4 的最長子字串。
我們考慮一個由 4、5、44、45 等組合組成的無限字串。此字串將包含按升序排列的 4 和 5 的組合的數字。使用此字串查詢僅包含數字 4 的最長子字串的長度。
演示 1
String = “3444445443”
輸出
the longest substring containing 4’s is 44444
解釋
在上述輸入字串 444445443 中,存在 3、4 和 5。任務是生成一個僅包含數字 4 的子字串。因此,使用輸入字串執行任務的輸出為 44444。
演示 2
在此演示中,我們採用一個按升序排列的 4 和 5 數字組合的輸入字串。我們定義輸入字串的長度,並以僅包含數字 4 的最長子字串的長度的形式生成輸出。
Total characters in the string = 6
輸出
3
解釋
我們為輸入字串取 6 個字元,生成的輸入字串為 454445。使用此字串,使用前 N 個字元僅包含數字 4 的子字串的長度為 3。
演示 3
Length of the string = 8
輸出
3
輸入字串的長度為 8,為此,可能的輸入字串為 45444554。使用初始字元僅包含數字 4 的子字串的長度為 3。
C++ 庫函式
語法
length() : 這是一個字串類庫函式,用於返回字串的長度。字串的位元組格式長度是字串中所有字元的總和。
string_name.length();
substr(): 它定義在字串類標頭檔案中。它使用輸入字串生成子字串。它接受 2 個引數:begin,length。
string_name.substr(begin, length);
演算法 1
獲取輸入字串長度。
函式 maxlengthSubstr() 返回僅包含數字 4 的最長子字串的長度。
初始化一個字首陣列以生成可能的輸入字串組合。
該陣列將從陣列變數迭代到 MAXN。
透過計算 result 變數值來查詢子字串的長度。
示例 1
在此實現中,使用者定義的函式 maxLengthSubstr() 返回僅包含數字 4 的最長子字串的長度。初始化一個 pre_arr{} 來計算長度。不要完整生成輸入字串,而是指定其長度。常量變數 MAXN 在程式碼開頭定義。
其 C++ 實現如下:
#include <bits/stdc++.h> using namespace std; #define MAXN 30 // Function returning the length of the longest substring containing only 4 int maxLengthSubstr(int Num) { //variable containing the result int ans; // Initialize array to make groups int pre_arr[MAXN], q = 1; pre_arr[0] = 0; for (int x = 1; x < MAXN; x++) { q *= 2; pre_arr[x] = pre_arr[x - 1] + x * q; } int l; //Finding the length of the longest substring for (int x = 1; x < MAXN; x++) { if (pre_arr[x] >= Num) { l = x; break; } } int i = Num - pre_arr[l - 1]; int j = 2 * l - 1; if (i >= j) ans = min(i, j); else ans = max(i, 2 * (l - 2) + 1); return ans; } // Controller int main() { int Num = 8; cout << "Maximum length of the longest substring of 8 string characters containing only 4s is : " << maxLengthSubstr(Num); return 0; }
輸出
Maximum length of the longest substring of 8 string characters containing only 4s is : 3
示例 2
在此實現中,使用者定義的函式 longestSubstr() 返回使用輸入字串的前 N 個字元僅包含數字 4 的最長子字串。輸入字串的每個字元都與數字 4 進行比較,當匹配時,計數器變數的值增加。
以下是上述說明的 C++ 實現。
#include <iostream> #include <string> using namespace std; //function returning the longest substring containing only 4 string longestSubstring(const string& str) { int maxLen = 0; int start = 0; int currentLen = 0; int currentStartIndex = 0; //iterating characters of the string for (int x = 0; x < str.length(); x++) { if (str[x] == '4') { if (currentLen == 0) { currentStartIndex = x; currentLen = 1; } else { currentLen++; } if (currentLen > maxLen) { maxLen = currentLen; start = currentStartIndex; } } else { currentLen = 0; } } string longestSubstr = str.substr(start, maxLen); return longestSubstr; } //Controller int main() { string str = "344444405474444"; string longestSubstr = longestSubstring(str); cout << "Longest substring of only 4's: " << longestSubstr << endl; return 0; }
輸出
Longest substring of only 4's: 44444
結論
我們已經完成了從輸入字串的前 N 個字元中查詢僅包含數字 4 的最長子字串的任務。這是使用 C++ 邏輯完成的。第一個解決方案涉及將輸入字串中的每個字元進行比較,以查詢僅包含數字 4 的最長子字串。在第二個解決方案中,確定僅包含數字 4 的最長子字串的長度。這是透過使用一個包含數字 4 和 5 按升序排列的字串(如 4、5、44、45……)來完成的。
這兩個解決方案都透過使用一些 C++ 庫函式幫助解決了問題。一些演示用於詳細說明問題陳述的目的。