無限字串前 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++ 庫函式幫助解決了問題。一些演示用於詳細說明問題陳述的目的。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP