LeetCode題解C++生成每種字符都是奇數(shù)個(gè)的字符串
題目描述
題目鏈接:1374. 生成每種字符都是奇數(shù)個(gè)的字符串
給你一個(gè)整數(shù) n
,請(qǐng)你返回一個(gè)含 n
個(gè)字符的字符串,其中每種字符在該字符串中都恰好出現(xiàn) 奇數(shù)次 。
返回的字符串必須只含小寫(xiě)英文字母。如果存在多個(gè)滿足題目要求的字符串,則返回其中任意一個(gè)即可。
提示:
1 <= n <= 500
示例 1:
輸入:n = 4
輸出:"pppz"
解釋:"pppz" 是一個(gè)滿足題目要求的字符串,因?yàn)?'p' 出現(xiàn) 3 次,且 'z' 出現(xiàn) 1 次。當(dāng)然,還有很多其他字符串也滿足題目要求,比如:"ohhh" 和 "love"。
示例 2:
輸入:n = 2
輸出:"xy"
解釋:"xy" 是一個(gè)滿足題目要求的字符串,因?yàn)?'x' 和 'y' 各出現(xiàn) 1 次。當(dāng)然,還有很多其他字符串也滿足題目要求,比如:"ag" 和 "ur"。
示例 3:
輸入: n = 7
輸出: "holasss"
整理題意
題目要求我們構(gòu)造一個(gè)長(zhǎng)度為 n
的字符串,且字符串中每個(gè)字符出現(xiàn)的次數(shù)都為奇數(shù)次。
題目規(guī)定字符串中的字符必須都是小寫(xiě)字母,因?yàn)榇鸢覆晃ㄒ唬苑祷厝我庖粋€(gè)都是可以的。
解題思路分析
由于題目?jī)H要求字符串中的字符都要出現(xiàn)奇數(shù)次,那么我們可以直接 分類討論:
- 當(dāng)
n
為奇數(shù)時(shí),我們直接構(gòu)造n
個(gè)相同的任意小寫(xiě)字母即可。 - 當(dāng)
n
為偶數(shù)時(shí),我們可以直接構(gòu)造n - 1
個(gè)相同的任意小寫(xiě)字母,然后在末尾添加一個(gè)與前面不同的任意一個(gè)小寫(xiě)字母即可。
具體實(shí)現(xiàn)
在構(gòu)造長(zhǎng)度為 n 的字符串時(shí),我們可以直接使用構(gòu)造函數(shù):string(size_type length, char ch)
,表示構(gòu)造長(zhǎng)度為 length
的字符串,字符串中每個(gè)字符都為 ch
,也就是 length
個(gè) ch
構(gòu)成的字符串。
寫(xiě)成 string s(n, c);
表示字符串 s
為 n
個(gè) 'c'
構(gòu)成的字符串(s = "ccc...ccc"
),而 string(n, c);
是直接返回 n
個(gè) 'c'
構(gòu)成的字符串("ccc...ccc"
)。
我們還可以直接通過(guò) while
循環(huán)來(lái)實(shí)現(xiàn)構(gòu)造:while(ans.length() < n) ans += 'c';
復(fù)雜度分析
- 時(shí)間復(fù)雜度:O(n)。
- 空間復(fù)雜度:O(1)。這里不計(jì)入返回值需要的空間。
代碼實(shí)現(xiàn)
class Solution { public: string generateTheString(int n) { // string(size_type length, char ch); // 以length為長(zhǎng)度的ch的拷貝(即length個(gè)ch) if(n & 1) return string(n, 'a'); else return string(n - 1, 'a') + 'b'; } };
總結(jié)
- 該題較為簡(jiǎn)單,僅需分類討論然后直接構(gòu)造即可,分為構(gòu)造長(zhǎng)度為奇數(shù)和偶數(shù)兩種情況。
- 該題所新學(xué)到的構(gòu)造函數(shù):
string(size_type length, char ch)
,表示length
個(gè)ch
構(gòu)成的字符串。同時(shí)還可以在聲明字符串時(shí)用到,例如:string s(length, ch);
,這就表示構(gòu)造的字符串賦值到一個(gè)變量s
上了。
測(cè)試結(jié)果:
以上就是LeetCode題解C++生成每種字符都是奇數(shù)個(gè)的字符串的詳細(xì)內(nèi)容,更多關(guān)于C++奇數(shù)字符串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)樹(shù)的動(dòng)態(tài)查找實(shí)例代碼
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)樹(shù)的動(dòng)態(tài)查找實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-06-06C語(yǔ)言利用數(shù)組和文件實(shí)現(xiàn)登錄注冊(cè)功能
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言利用數(shù)組和文件實(shí)現(xiàn)登錄注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12詳解桶排序算法的思路及C++編程中的代碼實(shí)現(xiàn)
桶排序即是先把每個(gè)桶中的元素進(jìn)行排序然后遍歷桶依次列出元素的算法,桶排序在元素較少的情況下很高效,以下我們就來(lái)詳解桶排序算法的思路及C++編程中的代碼實(shí)現(xiàn):2016-07-07C++錯(cuò)誤使用迭代器超出引用范圍問(wèn)題及解決方案
這篇文章主要介紹了C++錯(cuò)誤使用迭代器超出引用范圍分析與解決,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03C語(yǔ)言示例講解動(dòng)態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)
通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07C++小知識(shí):用合適的工具來(lái)分析你的代碼
今天小編就為大家分享一篇關(guān)于C++小知識(shí):用合適的工具來(lái)分析你的代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01c語(yǔ)言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡(jiǎn)單)
這篇文章主要介紹了c語(yǔ)言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡(jiǎn)單),需要的朋友可以參考下2014-01-01淺析c#中如何在form的webbrowser控件中獲得鼠標(biāo)坐標(biāo)
以下是對(duì)c#中如何在form的webbrowser控件中獲得鼠標(biāo)坐標(biāo)的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07