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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

压缩算法 【腾讯2020校园招聘-后台综合-第一次笔试 】

發(fā)布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 压缩算法 【腾讯2020校园招聘-后台综合-第一次笔试 】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:小Q想要給他的朋友發(fā)送一個神秘字符串,但是他發(fā)現(xiàn)字符串的過于長了,于是小Q發(fā)明了一種壓縮算法對字符串中重復(fù)的部分進(jìn)行了壓縮,對于字符串中連續(xù)的m個相同字符串S將會壓縮為[m|S](m為一個整數(shù)且1<=m<=100),例如字符串ABCABCABC將會被壓縮為[3|ABC],現(xiàn)在小Q的同學(xué)收到了小Q發(fā)送過來的字符串,你能幫助他進(jìn)行解壓縮么?

輸入描述:

輸入第一行包含一個字符串s,代表壓縮后的字符串。 S的長度<=1000; S僅包含大寫字母、[、]、|; 解壓后的字符串長度不超過100000; 壓縮遞歸層數(shù)不超過10層;

?

輸出描述:

輸出一個字符串,代表解壓后的字符串。

?

輸入例子1:

HG[3|B[2|CA]]F

?

輸出例子1:

HGBCACABCACABCACAF

?

例子說明1:

HG[3|B[2|CA]]F?>HG[3|BCACA]F?>HGBCACABCACABCACAF

?

分析:

題目給出的為一串壓縮過的字符串,壓縮的規(guī)律為:將連續(xù)的重復(fù)字符字串壓縮為一次,并記下出現(xiàn)的次數(shù)。現(xiàn)在要我們根據(jù)這個規(guī)律逆推出原字符串。這里我用了遞歸的方式來解這道題。

代碼如下:

#include<stdio.h> #include<string.h>char s[1005];//定義一個函數(shù),輸出重復(fù)的字符串 int decom(int i) { //確定重復(fù)次數(shù)int sum = s[i]-'0';while (1){i++;if(s[i]=='|')break;elsesum = sum*10 + s[i]-'0';} //標(biāo)記重復(fù)子串的起始位置int flag = i+1;int j=0;i+=1; //遍歷子串for(j;j<sum;){ //有嵌套的話,遞歸 if(s[i] == '[')i = decom(i+1); //結(jié)束一次循環(huán)else if(s[i] == ']'){j++;i++;//printf("sum=%d i=%d j=%d flag=%d\n",sum,i,j,flag);if(j<sum){ i = flag;//printf("循環(huán)%d次\n",j);}}else{printf("%c",s[i]);i++;}}//printf("return%d\n",i);return i; }int main() {scanf("%s",s);int i;for (i=0;i<strlen(s);i++){if(s[i]=='[') //這里要注意減一i = decom(i+1)-1;else if(s[i]==']' || s[i]=='|')continue;elseprintf("%c",s[i]);}return 0;}

?

總結(jié)

以上是生活随笔為你收集整理的压缩算法 【腾讯2020校园招聘-后台综合-第一次笔试 】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。