題目大意:
給定乙個壓縮後的字串,求其解壓縮之後的長度。
兩個儲存的規則:(1)如果字串中有連續相同的大寫字母,它們可以選擇用」字元+出現次數」的方式替代。如字串』aabccccdd』,可以用』a2bc4d2』表示,也可以用』a2bc2c2dd』表示。
(2)如果字串中有連續出現的模式串(模式串長度大於1),它們可以選擇用」(模式)+出現次數」的方式替代。如字串』fabcabcabce』,可以用』f(abc)3e』表示,也可以用』f(abc)2abce』表示。
上述規則中的」連續」均指出現次數大於1,規則(2)中的括號後一定是乙個大於1的數值,代表出現次數。
綜合上述兩個規則,字串』aabaabfaabaabfg』可以用』((a2b)2f)2g』表示。小y保證輸出的壓縮串符合上述的兩個規則,以下型別的非法字串不會出現:
『(a)5』: 括號冗餘
『a1a4』: 數字1冗餘
『a((aa))2』: 括號冗餘
(abc)1: 括號和數字1冗餘
對於給定的乙個用上述規則壓縮後的字串,對應的原串是唯一的。小y想知道這個字串原來的長度是多少,以此計算壓縮倍率。你能幫助他嗎?
樣例輸入
4(aa)2
a((a2b)2)2g
wangyi
a2bc4d2
樣例輸出513
69
維護乙個棧,
遇到 『(』 將當前累計長度先壓棧,遇到 『)』則需要考慮其後面的
數字串
,將當前長度乘倍,並且將 棧頂元素出棧,累加到當前的長度上,遇到a-z,將當前長度 +1
遇到數字,代表前乙個字元乘倍
#include
#include
#include
using
namespace
std;
//fstream resource("/users/bingoboy/downloads/cases.txt");
int cnt;
string tmp;
stack
cstack;
char buf[110];
int main()else
if(buf[i]==')')
cur*=mul; mul=0; // 當前長度乘倍
i=j;
}else
cur+=ntk.top(); ntk.pop(); //棧頂元素出棧 ,累加到當前長度
}else
if(isdigit(buf[i]))
cur+=mul-1; mul=0; //前乙個字元乘倍
i=j;
}else
}cout
/*int parentheses(string & aa)
int fcnt = 0;
int amount = 0;
for (int i = 0; i < aa.size(); ++i)
if (aa[i] == ')')
i--;
cstack.pop();
fcnt = amount * fcnt + cstack.top();
amount = 0;
cstack.pop();
continue;
}while (aa[i] <= '9' && aa[i] >= '0')
if (amount > 0)
fcnt += 1;
}return fcnt;
}int main(int argc, const char * argv)
return 0;
}*/
掃碼關注作者,定期分享技術、演算法類文章
2015網易遊戲校園招聘筆試題 研發崗
題量比較大,大題有6個。1.最小字典序字串,2.遞迴繪圖函式轉非遞迴 3.遊戲程式設計中常用的資料結構4叉樹,有三問,一問是寫出如何判斷點在矩形中和判斷兩矩形是否相交,第二問是寫建立四叉樹的實現,第三問是如何根據已知的矩形塊,在四叉樹中尋找包含的物體。4.kd樹,英文題,沒怎麼看,第一問問給出的乙個...
2020 08 08網易筆試
注釋部分 超時了,優化後如下 def test1 n int input arr list map int input strip split n res 0for i in range n res countprime arr i return res defcountprime n if n 2...
(原創)名企筆試 2017網易遊戲筆試 (賽馬)
在一條無限長的跑道上,有n匹馬在不同的位置上出發開始賽馬。當開始賽馬比賽後,所有的馬開始以自己的速度一直勻速前進。每匹馬的速度都不一樣,且全部是同樣的均勻隨機分布。在比賽中當某匹馬追上了前面的某匹馬時,被追上的馬就出局。請問按以上的規則比賽無限長的時間後,賽道上剩餘的馬匹數量的數學期望是多少?輸入描...