日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【简便解法】1078 字符串压缩与解压 (20分)_42行代码AC

發(fā)布時間:2024/2/28 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【简便解法】1078 字符串压缩与解压 (20分)_42行代码AC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

立志用更少的代碼做更高效的表達


Pat乙級最優(yōu)化代碼+題解+分析匯總——>傳送門


文本壓縮有很多種方法,這里我們只考慮最簡單的一種:把由相同字符組成的一個連續(xù)的片段用這個字符和片段中含有這個字符的個數來表示。例如 ccccc 就用 5c 來表示。如果字符沒有重復,就原樣輸出。例如 aba 壓縮后仍然是 aba。

解壓方法就是反過來,把形如 5c 這樣的表示恢復為 ccccc。

本題需要你根據壓縮或解壓的要求,對給定字符串進行處理。這里我們簡單地假設原始字符串是完全由英文字母和空格組成的非空字符串。

輸入格式:
輸入第一行給出一個字符,如果是 C 就表示下面的字符串需要被壓縮;如果是 D 就表示下面的字符串需要被解壓。第二行給出需要被壓縮或解壓的不超過 1000 個字符的字符串,以回車結尾。題目保證字符重復個數在整型范圍內,且輸出文件不超過 1MB。

輸出格式:
根據要求壓縮或解壓字符串,并在一行中輸出結果。

輸入樣例 1:
C
TTTTThhiiiis isssss a tesssst CAaaa as
輸出樣例 1:
5T2h4is i5s a3 te4st CA3a as

輸入樣例 2:
D
5T2h4is i5s a3 te4st CA3a as10Z
輸出樣例 2:
TTTTThhiiiis isssss a tesssst CAaaa asZZZZZZZZZZ


解析

考慮這兩個樣例:

樣例1:
C
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
樣例2:
D
123C
樣例3:
C
ABCDEFG

本題的難點就在于如何處理10以上的數字。

對于編碼,可以用循環(huán)查找字符出現的次數,然后轉化成字符串賦值。

對于解碼,可以用循環(huán)查找數字的位數,然后轉化成對應數量的字符。

具體見代碼


代碼

#include<bits/stdc++.h> using namespace std; int main() {char c; cin >> c; getchar();string s, s1; getline(cin, s);if(c == 'C') {for(int i = 0; i < s.length(); i++) {char c = s[i];int num = 0;while(s[i] == c) {i++; num++;}i--; if(num > 1) {string s2; stringstream ss; ss << num;ss >> s2;s1 += s2; } s1 += c; }} else {for(int i = 0; i < s.length(); i++) {char c = s[i];if(isdigit(c)) { //如果是數字 int num = c-'0'; while(isdigit(s[i+1])) { //統(tǒng)計數字的個數 i++;num = num*10+(int)(s[i]-'0');} for(int j = 0; j < num; j++) //賦值 s1 += s[i+1];i++;} else { //如果不是數字,直接加 s1 += s[i];}}}cout <<s1; return 0; }

耗時


每日一句

唯有經歷過櫛風沐雨般的人生,方能顯得淡定從容。

總結

以上是生活随笔為你收集整理的【简便解法】1078 字符串压缩与解压 (20分)_42行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。