無限字串前 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++ 庫函式幫助解決了問題。一些演示用於詳細說明問題陳述的目的。

更新於: 2023-08-18

81 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告