日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在這個問題中,我們需要分割給定的字符串,使得第三個子字符串可以是前兩個子字符串的子字符串。

讓我們想想解決辦法。僅當前兩個字符串包含第三個字符串的所有字符時,第三個字符串才可以是前兩個字符串的子字符串。所以,我們需要在給定的字符串中找到至少一個出現頻率大于3的字符,并且我們可以取該單個字符的第三個子串。

問題陳述 – 我們給出了一個包含 N 個小寫字母字符的字符串 str。我們需要檢查是否可以將字符串拆分為三個子字符串 a、b 和 c,使得子字符串 c 是 a 和 b 的子字符串。根據是否能找到 3 個子串,打印“yes”或“no”。

示例

Input –  str = "tutorialsPoint"

登錄后復制

Output – ‘Yes’

登錄后復制登錄后復制

說明

在這里,我們可以將字符串拆分為“tu”、“torialsPoin”和“t”。因此,第三個字符串是前兩個字符串的子字符串。

Input –  str = "tutorials"

登錄后復制

Output – ‘No’

登錄后復制

說明

我們無法根據給定條件將字符串拆分為三個子字符串,因為任何字符的頻率都不大于 3。

Input –  str = "hhhhhhhh"

登錄后復制

Output – ‘Yes’

登錄后復制登錄后復制

說明

根據給定條件,三個子字符串可以是‘h’、‘h’和‘hhhhhh’。

方法 1

在這種方法中,我們將使用一個數組來存儲每個字符的頻率。之后,我們將檢查頻率大于或等于3的字符。

算法

    步驟 1 – 定義長度等于 26 的“freq”數組。

    步驟 2 – 遍歷字符串以計算字符的頻率。在 for 循環中,增加 freq[str[i] – ‘a’] 的值。這里,str[i] – ‘a’給出0到26之間的索引。

    第 3 步 – 現在,遍歷“freq”數組,如果任意數組索引處的值大于“3”,則返回 true。

    第 4 步 – 循環終止時返回 true。

    第 5 步 – 根據 isSUbStringPossible() 函數的返回值打印“是”或“否”。

    示例

    #include <bits/stdc++.h>
    using namespace std;
    // function to Check if a string can be split into 3 substrings such that one of them is a substring of the other two
    string isSubStringPossible(string str, int len){
    
       // array to store the frequency
       int freq[26] = {0};
       
       // Iterate over the string
       for (int i = 0; i < len; i++){
       
          // count the frequency of each character
          freq[str[i] - 'a']++;
       }
       
       // Traverse the frequency array
       for (int i = 0; i < 26; i++){
       
          // If the frequency of any character is greater than or equal to 3, then return "Yes."
          if (freq[i] >= 3){
             return "Yes";
          }
       }
       
       // Otherwise
       return "No";
    }
    int main(){
       string str = "tutorialsPoint";
       int len = str.length();
       cout << "The given string can be splited into 3 substrings such that one of them is a substring of the other two - " << isSubStringPossible(str, len);
       return 0;
    }
    

    登錄后復制

    輸出

    The given string can be splited into 3 substrings such that one of them is a substring of the other two - Yes
    

    登錄后復制登錄后復制

    時間復雜度 – O(N),當我們遍歷字符串時。

    空間復雜度 – O(1),因為我們使用恒定長度的數組。

    方法2

    在這種方法中,我們首先將字符串轉換為字符數組。之后,我們使用 count() 方法來統計數組中特定字符的出現頻率。

    算法

      第 1 步 – 創建一個大小為“len + 1”的數組,其中“len”是字符串長度。

      第 2 步 – 使用 strcpy() 方法將字符串復制到 char 數組中。

      第 3 步 – 使用 for 循環進行總共 26 次迭代。

      步驟 4 – 在 for 循環中,使用 count() 方法來計算特定字符的出現次數。

      count() 方法將對開始位置的引用作為第一個參數,對結束位置的引用作為第二個參數,以及一個字符作為第三個參數。

      在這里,我們需要將字符的 ASCII 值作為參數傳遞,我們使用 I + ‘a’ 來獲取該值。

      第 5 步 – 如果 count() 方法返回大于或等于 3,則返回 true。

      第 6 步 – 循環終止時返回 false。

      示例

      #include <bits/stdc++.h>
      using namespace std;
      // function to Check if a string can be split into 3 substrings such that one of them is a substring of the other two
      string isSubStringPossible(string str, int len){
      
         //    converting str to char array.
         char char_array[len + 1];
         
         // copy string to char array
         strcpy(char_array, str.c_str());
         
         // make 26 iterations
         for (int i = 0; i < 26; i++){
         
            // Using count() to count the occurrence of each character in the array, and return 'yes' if any character occurs more than 2 times.
            if (count(char_array, char_array + len, i + 'a') >= 2)
               return "YES";
         }
         return "NO";
      }
      int main(){
         string str = "tutorials";
         int len = str.length();
         cout << "The given string can be splited into 3 substrings such that one of them is a substring of the other two - " << isSubStringPossible(str, len);
         return 0;
      }
      

      登錄后復制

      輸出

      The given string can be splited into 3 substrings such that one of them is a substring of the other two - Yes
      

      登錄后復制登錄后復制

      時間復雜度 – O(N),因為 count() 方法迭代 char 數組來計算字符數。另外,strcpy() 方法需要 O(N) 時間。

      空間復雜度 – O(N),因為我們將字符串存儲到字符數組中。

      結論

      我們學習了兩種將字符串拆分為三個子字符串的方法,這樣一個子字符串可以成為另外兩個子字符串的子字符串。第二種方法的代碼更具可讀性,對初學者更友好,但時間和空間成本更高。

      以上就是檢查一個字符串是否可以被分割成三個子字符串,其中一個子字符串是另外兩個子字符串的子串的詳細內容,更多請關注www.xfxf.net其它相關文章!

分享到:
標簽:子字符串 字符串分割 檢查
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定