題目描述
利用字符重復出現的次數,編寫一個方法,實現基本的字符串壓縮功能。比如,字符串“aabcccccaaa”經壓縮會變成“a2b1c5a3”。若壓縮后的字符串沒有變短,則返回原先的字符串。
給定一個string iniString為待壓縮的串(長度小於等於10000),保證串內字符均由大小寫英文字母組成,返回一個string,為所求的壓縮后或未變化的串。
測試樣例
"aabcccccaaa"
返回:"a2b1c5a3"
"welcometonowcoderrrrr"
返回:"welcometonowcoderrrrr"
解題思路:利用to_string函數和append進行計數器到目標壓縮串的轉換
#include<iostream> #include<string> #include<algorithm> using namespace std; //"welcometonowcoderrrrr" //"w2e3l1c2o4m1t1n1d1r5",之前題意理解錯誤 //"w1e1l1c1o1m1e1t1o1n1o1w1c1o1d1e1r5"題意所述 class Zipper { public: string zipString(string iniString) { string str; int i = 0,j = 0; while (i < iniString.length()){ while (iniString[i] == iniString[j]) i++; str += iniString[j]; str += to_string(i-j); j = i;//關鍵的一步,既保證了i-j是長度又滿足了上邊 while (iniString[i] == iniString[j]) i++; //繼續和后面進行比較是否相等 } if (iniString.length() < str.length()) return iniString; else return str; } }; int main() { Zipper a; cout<<a.zipString("welcometonowcoderrrrr"); }
