压缩算法 【腾讯2020校园招聘-后台综合-第一次笔试 】
生活随笔
收集整理的這篇文章主要介紹了
压缩算法 【腾讯2020校园招聘-后台综合-第一次笔试 】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:小Q想要給他的朋友發(fā)送一個(gè)神秘字符串,但是他發(fā)現(xiàn)字符串的過(guò)于長(zhǎng)了,于是小Q發(fā)明了一種壓縮算法對(duì)字符串中重復(fù)的部分進(jìn)行了壓縮,對(duì)于字符串中連續(xù)的m個(gè)相同字符串S將會(huì)壓縮為[m|S](m為一個(gè)整數(shù)且1<=m<=100),例如字符串ABCABCABC將會(huì)被壓縮為[3|ABC],現(xiàn)在小Q的同學(xué)收到了小Q發(fā)送過(guò)來(lái)的字符串,你能幫助他進(jìn)行解壓縮么?
輸入描述:
輸入第一行包含一個(gè)字符串s,代表壓縮后的字符串。 S的長(zhǎng)度<=1000; S僅包含大寫(xiě)字母、[、]、|; 解壓后的字符串長(zhǎng)度不超過(guò)100000; 壓縮遞歸層數(shù)不超過(guò)10層;?
輸出描述:
輸出一個(gè)字符串,代表解壓后的字符串。?
輸入例子1:
HG[3|B[2|CA]]F?
輸出例子1:
HGBCACABCACABCACAF?
例子說(shuō)明1:
HG[3|B[2|CA]]F?>HG[3|BCACA]F?>HGBCACABCACABCACAF?
分析:
題目給出的為一串壓縮過(guò)的字符串,壓縮的規(guī)律為:將連續(xù)的重復(fù)字符字串壓縮為一次,并記下出現(xiàn)的次數(shù)。現(xiàn)在要我們根據(jù)這個(gè)規(guī)律逆推出原字符串。這里我用了遞歸的方式來(lái)解這道題。
代碼如下:
#include<stdio.h> #include<string.h>char s[1005];//定義一個(gè)函數(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校园招聘-后台综合-第一次笔试 】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决SurfaceView预览Camer
- 下一篇: LeetCode | Climbing