每天一道LeetCode-----将字符串的连续相同的字符合并成一个字符后加个数
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----将字符串的连续相同的字符合并成一个字符后加个数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Count and Say
原題鏈接 Count and Say
求出第n個表達式,第n個表達式由第n-1個表達式的讀音構成。如
- 第3個表達式為21,讀作1個2,1個1,所以第4個表達式就是1211。
- 第4個表達式讀作1個1,1個2,2個1,所以第5個表達式為111221。
話說以前有次考試給的就是這一堆字符串,沒給說明,問下一個是什么,當時的想法:這都是什么鬼?
因為第n個表達式需要第n-1個表達式,所以只能從第一個開始求了,然后每次計算讀音,構成新的表達式,再求下一個表達式…
class Solution { public:string countAndSay(int n) {/* 第一個表達式是1 */string res("1");while(--n){/* 下一個新的表達式 */string tmp("");/* 當前字符 */char prev = res[0];/* 記錄當前字符出現了多少次 */int cnt = 1;for(int i = 1; i <= res.size(); ++i){/* 帶等號是為了添加最后一個字符,這樣就不用寫在for外面了 */if(i < res.size() && res[i] == prev){++cnt;}else{/* * 不能寫成tmp += static_cast<char>(cnt + '0') + prev;* 比如cnt + '0' + '1'不是一個數字字符了*/tmp += static_cast<char>(cnt + '0');tmp += prev;if(i < res.size()){prev = res[i];cnt = 1;}}}/* 移動語義,防止拷貝 */res = std::move(tmp);}return res;} };String Compression
原題鏈接String Compression
給一個字符數組,把連續一樣的合并,后面增加個數。如果只有1個可以不加個數,圖片例子比較直觀。
要求就是在原字符數組上做更改,不能有額外的內存使用
代碼如下
總結
以上是生活随笔為你收集整理的每天一道LeetCode-----将字符串的连续相同的字符合并成一个字符后加个数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----数独盘
- 下一篇: 每天一道LeetCode-----找到给