目錄
範例
方法2
演算法
輸出
首頁 後端開發 C++ 包含恰好X個元音字母的長度為K的子串的數量

包含恰好X個元音字母的長度為K的子串的數量

Sep 01, 2023 am 08:57 AM
長度 元音字母 子串數量

包含恰好X個元音字母的長度為K的子串的數量

在這個問題中,我們需要找到長度為 K 且剛好包含 K 個元音的子字串的總數。我們將看到解決問題的兩種不同方法。我們可以使用簡單的方法來檢查每個長度為 K 的子字串中元音的數量。此外,我們可以使用滑動視窗方法來解決該問題。

問題陳述——我們給了一個長度為 N 的字串 str,包含小寫和大寫字母字元。我們需要統計長度為 K 且剛好包含 X 個元音的子字串的總數。

範例

輸入– str = "TutorialsPoint", K = 3, X = 2

輸出– 6

解釋– 長度為 3 且剛好包含 2 個母音的子字串為:'uto'、'ori'、'ria'、'ial'、'Poi' 和 'oin'。 p>

輸入– str = ‘aeiou’, K = 2, X = 2

輸出– 4

解釋-長度為2且剛好包含2個母音的子字串是:‘ae’、‘ei’、‘io’和‘ou’。

輸入– str = ‘fghjsdfdffg’, K = 5, X = 1

輸出– 0

解釋-字串str不包含任何元音,因此我們找不到任何包含1個元音的子字串。

方法 1

在這個方法中,我們將找到str的長度為K的每個子字串。之後,我們將計算特定子字串中元音的總數,如果發現它們等於 X,則可以將計數增加 1。

演算法

  • 在 cntSubStr() 函數中,將「cnt」變數初始化為零,以儲存子字串的總數。

  • 使用循環從第 0 個索引開始迭代到 len - K 索引,其中「len」是字串的長度。

  • 在迴圈中,使用 substr() 方法取得從第 i 個索引開始的長度為 K 的子字串。

  • 執行countVowel()函數來統計子字串中元音的總數。

    • 在 countVowel() 函數中,將「vowels」變數初始化為零,以儲存母音總數。

    • 遍歷子字串,目前字元為元音,將‘vowels’的值加1。

    • 傳回「母音」。

  • 在 cntSubStr() 函數中,如果子字串中的母音總數等於 X,則將「cnt」的值增加 1。

  • 傳回「cnt」的值。

範例

#include <bits/stdc++.h>
using namespace std;

// function to count the total number of vowels in a string
int cntVowels(string alpha) {
   int vows = 0;
   for (int i = 0; i < alpha.length(); i++) {
      if (alpha[i] == 'a' || alpha[i] == 'e' || alpha[i] == 'i' || alpha[i] == 'o' ||
          alpha[i] == 'u' || alpha[i] == 'A' || alpha[i] == 'E' || alpha[i] == 'I' ||
          alpha[i] == 'O' || alpha[i] == 'U')
          vows++;
   }
   return vows;
}
int cntSubstr(string str, int K, int X) {
   int cnt = 0;
   // traverse the string and check for the total number of vowels in each substring of length K
    for (int i = 0; i <= str.length() - K; i++) {
       // get the substring of length K starting from index i
       string sub = str.substr(i, K);
       // check if the total number of vowels in the substring is equal to X, then increment cnt
       if (cntVowels(sub) == X)
          cnt++;
   }
   return cnt;
}
// Driver code
int main(void) {
   string str = "TutorialsPoint";
   int K = 3, X = 2;
   cout << "The total number of substrings of length " << K << " containing " << X << " vowels is " << cntSubstr(str, K, X);
   return 0;
}
登入後複製

輸出

The total number of substrings of length 3 containing 2 vowels is 6
登入後複製
登入後複製

時間複雜度– O(N*K),當我們遍歷str時,遍歷countVowel()函數中的子字串。

空間複雜度– O(K),因為我們儲存子字串

方法2

我們將使用滑動視窗技術來解決這種方法中的問題。我們將從子字串中刪除第一個字符,並在末尾添加 1 個字符。另外,我們將追蹤當前子字串中元音的計數,如果它等於 X,我們可以將計數增加 1。

演算法

  • 定義 isVowel() 函數,根據特定字元是否為元音傳回布林值。

  • 在 cntSubStr() 函數中,定義「total_vow」並初始化為零,以儲存目前視窗中的總元音。

  • 從第 0 個索引開始,求長度為 K 的子字串中母音的總數,代表第一個視窗。

  • 根據「vow」的值是否等於X,將「cnt」變數初始化為1或0。

  • 開始從第 1 個位置遍歷字串到 len – K 索引。

  • 如果 (i-1) 字元是母音,則將「total_vow」的值減 1。

  • 如果第 (i - 1 K) 個索引處的字元是元音,則將「total_vow」的值增加 1。

  • 如果「total_vow」等於 X,則將「cnt」增加 1。

  • 傳回「cnt」的值。

範例

#include <bits/stdc++.h>
using namespace std;
bool isVowel(char ch) {
   // convert character to lowercase
   ch = tolower(ch);
   return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u');
}
int cntSubstr(string str, int K, int X) {
   // To store total vowels
   int total_vow = 0;
   // Count the number of vowels in the first window
   for (int p = 0; p < K; p++)
       if (isVowel(str[p]))
            total_vow++;
   // to store the total number of substrings of length K containing X vowels
   int cnt = 0;
   // If the first window contains exactly X vowels, initialize cnt as 1
   cnt = total_vow == X ? 1 : 0;
   // traverse the string
   for (int i = 1; i <= str.length() - K; i++) {
      // exclude the (i - 1)th character from the window and update the total_vow
      total_vow = isVowel(str[i - 1]) ? total_vow - 1 : total_vow;
      // Add [i-1+K]th character to the current window and update total_vow
      total_vow = isVowel(str[i - 1 + K]) ? total_vow + 1 : total_vow;
      // If the current window contains exactly X vowels, increment cnt
      if (total_vow == X)
          cnt++;
   }
   return cnt;
}
int main(void) {
   string str = "TutorialsPoint";
   int K = 3, X = 2;
   cout << "The total number of substrings of length " << K << " containing " << X << " vowels is " << cntSubstr(str, K, X);
   return 0;
}
登入後複製

輸出

The total number of substrings of length 3 containing 2 vowels is 6
登入後複製
登入後複製

時間複雜度 - O(N),因為我們遍歷字串。

空間複雜度 - O(1),因為我們不使用任何額外的空間。

我們優化了第二種方法並降低了程式碼的時間複雜度。此外,我們也優化了第二種方法的空間複雜度。在這裡,我們找到了恰好包含 X 個元音字母的長度為 K 的子串總數,但是程式設計師可以嘗試找到恰好包含 K 個元音字母的任意長度的子字串總數。

以上是包含恰好X個元音字母的長度為K的子串的數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
透過依照元音字母在字串中的索引位置重新排列,修改字串 透過依照元音字母在字串中的索引位置重新排列,修改字串 Sep 06, 2023 pm 06:53 PM

在本文中,我們將討論如何透過在各自索引處按字母順序重新排列元音來修改C++中的給定字串。我們還將解釋用於解決此問題的方法,並提供帶有測試案例的範例。問題陳述給定一個字串,按字母順序在各自的索引處重新排列元音。字串中的子音應保持其原始順序。例如,給定字串“tutorialspoint”,輸出應為“tatiriolspount”。方法這個問題可以用簡單的演算法來解決。我們可以先建立一個單獨的字串,其中按各自的順序包含給定字串中的所有元音。然後我們可以按字母順序對該字串進行排序。最後,

PHP數組長度限制是多少? PHP數組長度限制是多少? Mar 13, 2024 pm 06:30 PM

PHP中數組的長度並沒有固定的限制,它可以根據系統的記憶體大小來動態調整。在PHP中,陣列是一種非常靈活的資料結構,可以儲存任意數量的元素,每個元素可以是任意類型的值,甚至可以是另一個陣列。 PHP數組的長度限制主要取決於系統的記憶體大小和PHP配置的記憶體限制。一般來說,如果系統的記憶體夠大,且PHP的記憶體限制夠高,陣列的長度可以很大。但是,如果系統記憶體不足或

PHP數組長度是否受限? PHP數組長度是否受限? Mar 13, 2024 pm 06:36 PM

PHP數組長度是否受限?需要具體程式碼範例在PHP中,陣列長度並不受固定的限制,可以根據系統記憶體的實際限制來動態調整陣列大小。 PHP中的數組是一種動態數組,因此可以根據需要動態增長或縮小。在PHP中,陣列是一種有序映射的資料結構,可以用數組下標或關聯數組的鍵值來存取數組元素。下面我們來看具體的程式碼範例來示範PHP數組長度是否受限制。首先,我們可以透過以下代

給定一個數組,求兩個字串長度總和的最大值,這兩個字串沒有相同的字符 給定一個數組,求兩個字串長度總和的最大值,這兩個字串沒有相同的字符 Aug 29, 2023 pm 06:45 PM

本文的目的是實現一個程序,以最大化給定數組中沒有公共字元的一對字串的長度總和。根據定義,字串是字元的集合。問題陳述實作一個程序,以最大化給定數組中沒有公共字元的一對字串的長度總和。範例1LetusconsidertheInputarray:a[]=[“efgh”,“hat”,“fto”,“car”,“wxyz”,“fan”]Outputobtained:8說明字串「abcd」和「wxyz」中沒有共同字元。結果,兩個字串相加的長度為4+4,等於8,是所有可行對中最長的長度。範例2Letu

解析len函數的用途和重要性的多個視角 解析len函數的用途和重要性的多個視角 Dec 28, 2023 am 08:38 AM

len函數的作用與意義從不同角度解讀len函數是Python程式語言中常用的函數之一。它主要用於傳回一個容器物件(例如字串、列表、元組等)的長度或元素個數。這個簡單的函數在編寫程式時起著非常重要的作用,有著多個角度可以解讀其作用與意義。本文將從效能、可讀性和容器類型的角度對len函數進行解讀,並提供具體的程式碼範例。一、效能角度在處理大規模資料時,程式的效能

golang中如何驗證輸入文字的長度 golang中如何驗證輸入文字的長度 Jun 24, 2023 am 11:52 AM

在golang中,驗證輸入文字的長度是一個常見的需求。透過驗證,我們可以確保輸入的文字符合特定的要求,並且長度在我們期望的範圍內。在本文中,我們將探討如何使用golang驗證輸入文字的長度。首先,我們要先了解golang中常用的字串函數。其中,len()函數用於計算字串的長度。例如,以下程式碼可以計算字串"helloworld"的長度:str:=

產生長度為n的Lyndon單字的Python程序 產生長度為n的Lyndon單字的Python程序 Aug 31, 2023 pm 09:29 PM

在這個問題中,我們將使用陣列的字母數字字元來尋找所有Lyndon單字。在開始之前,讓我們先來了解一下Lyndon一詞的定義。所有單字都是Lyndon單詞,嚴格按照字典順序小於其所有循環。以下是Lyndon單字的範例。 ab-“ab”嚴格按照字典順序小於其所有排列“ba”。 89-‘89’的旋轉是‘98’,嚴格依字典順序大於‘89’。 abc-‘abc’的旋轉是‘bca’和‘cab’,它們嚴格大於‘abc’。以下是非Lyndon單字的範例。 aaa-aaa是非林登詞,因為「aaa」的所有旋轉都是相同的。 bca

如何在Java中找到斜邊的長度? 如何在Java中找到斜邊的長度? Sep 09, 2023 pm 10:33 PM

斜邊是指直角三角形中與直角相對的最長邊。可以使用畢達哥拉斯定理來找出斜邊的長度。根據畢達哥拉斯定理,兩邊長度的平方和等於第三邊長度的平方,即a2+b2=c2其中,a、b、c表示直角三角形的三邊。 So,Hypotenuse=Math.sqrt(Math.pow(base,2)+Math.pow(height,2))在本文中,我們將看到如何使用Java程式語言找到斜邊的長度。展示給你一些實例Instance-1的中文翻譯為:實例-1假設底長和高分別為3和4。然後透過使用勾股定理公式,Length

See all articles