包含恰好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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

斜邊是指直角三角形中與直角相對的最長邊。可以使用畢達哥拉斯定理來找出斜邊的長度。根據畢達哥拉斯定理,兩邊長度的平方和等於第三邊長度的平方,即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
