LeetCode題解C++生成每種字符都是奇數(shù)個的字符串
題目描述
題目鏈接:1374. 生成每種字符都是奇數(shù)個的字符串
給你一個整數(shù) n,請你返回一個含 n 個字符的字符串,其中每種字符在該字符串中都恰好出現(xiàn) 奇數(shù)次 。
返回的字符串必須只含小寫英文字母。如果存在多個滿足題目要求的字符串,則返回其中任意一個即可。
提示:
1 <= n <= 500
示例 1:
輸入:n = 4
輸出:"pppz"
解釋:"pppz" 是一個滿足題目要求的字符串,因為 'p' 出現(xiàn) 3 次,且 'z' 出現(xiàn) 1 次。當(dāng)然,還有很多其他字符串也滿足題目要求,比如:"ohhh" 和 "love"。
示例 2:
輸入:n = 2
輸出:"xy"
解釋:"xy" 是一個滿足題目要求的字符串,因為 'x' 和 'y' 各出現(xiàn) 1 次。當(dāng)然,還有很多其他字符串也滿足題目要求,比如:"ag" 和 "ur"。
示例 3:
輸入: n = 7
輸出: "holasss"
整理題意
題目要求我們構(gòu)造一個長度為 n 的字符串,且字符串中每個字符出現(xiàn)的次數(shù)都為奇數(shù)次。
題目規(guī)定字符串中的字符必須都是小寫字母,因為答案不唯一,所以返回任意一個都是可以的。
解題思路分析
由于題目僅要求字符串中的字符都要出現(xiàn)奇數(shù)次,那么我們可以直接 分類討論:
- 當(dāng)
n為奇數(shù)時,我們直接構(gòu)造n個相同的任意小寫字母即可。 - 當(dāng)
n為偶數(shù)時,我們可以直接構(gòu)造n - 1個相同的任意小寫字母,然后在末尾添加一個與前面不同的任意一個小寫字母即可。
具體實現(xiàn)
在構(gòu)造長度為 n 的字符串時,我們可以直接使用構(gòu)造函數(shù):string(size_type length, char ch),表示構(gòu)造長度為 length 的字符串,字符串中每個字符都為 ch,也就是 length 個 ch 構(gòu)成的字符串。
寫成 string s(n, c); 表示字符串 s 為 n 個 'c' 構(gòu)成的字符串(s = "ccc...ccc"),而 string(n, c); 是直接返回 n 個 'c' 構(gòu)成的字符串("ccc...ccc")。
我們還可以直接通過 while 循環(huán)來實現(xiàn)構(gòu)造:while(ans.length() < n) ans += 'c';
復(fù)雜度分析
- 時間復(fù)雜度:O(n)。
- 空間復(fù)雜度:O(1)。這里不計入返回值需要的空間。
代碼實現(xiàn)
class Solution {
public:
string generateTheString(int n) {
// string(size_type length, char ch);
// 以length為長度的ch的拷貝(即length個ch)
if(n & 1) return string(n, 'a');
else return string(n - 1, 'a') + 'b';
}
};
總結(jié)
- 該題較為簡單,僅需分類討論然后直接構(gòu)造即可,分為構(gòu)造長度為奇數(shù)和偶數(shù)兩種情況。
- 該題所新學(xué)到的構(gòu)造函數(shù):
string(size_type length, char ch),表示length個ch構(gòu)成的字符串。同時還可以在聲明字符串時用到,例如:string s(length, ch);,這就表示構(gòu)造的字符串賦值到一個變量s上了。
測試結(jié)果:

以上就是LeetCode題解C++生成每種字符都是奇數(shù)個的字符串的詳細(xì)內(nèi)容,更多關(guān)于C++奇數(shù)字符串的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++中內(nèi)存池和內(nèi)存分配區(qū)Arena概念詳解
在 C++ 中,內(nèi)存分配區(qū)(Arena)通常指的是預(yù)先分配的一大塊連續(xù)內(nèi)存空間,這種方法的主要目的是提高內(nèi)存分配和釋放的效率,下面就跟隨小編一起了解一下C++中內(nèi)存池和內(nèi)存分配區(qū)Arena相關(guān)概念吧2023-12-12

