【文字列処理】力ボタン394
タイトルの説明:符号化された文字列を指定し、復号された文字列を返します.
符号化規則は、k[encoded_string]であり、カッコ内のencoded_を表すstringはちょうどk回繰り返します.注意kは正の整数であることを保証する.
入力文字列は常に有効であると考えられます.入力文字列には余分なスペースがなく、入力した四角カッコは常にフォーマットの要件を満たしています.
また、元のデータには数字は含まれておらず、すべての数字は重複回数kのみを表し、例えば3 aや2[4]のような入力は現れないと考えられます.
例:s="3[a]2[bc],は"aaabcbc"を返す.s="3[a 2[c]",は"accaccacc"を返す.s=「2[abc]3[cd]ef」で、「abcabccdcdef」を返します.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/decode-string著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
プリシールコード
注釈:素朴な問題で、答えに倣っていくつかの細部を処理し、書かれたコードを処理しました.大体の構想は、目標列gsに沿って後に読んで、数字を読んで数字で処理して、アルファベットの部分を読んで再帰的に処理して、1つの']'の部分を読むたびに数字で1ラウンドコピーして、それからこの列に戻ります;
isdigitとisalphaの2つの関数は初めて出会って、勉強します;
再帰処理文字列は、頭がはっきりしていて、どの文字がどのように処理されているのか、再帰の原則は何なのかを読んでいます.これらの問題をしっかり把握して解決した.
符号化規則は、k[encoded_string]であり、カッコ内のencoded_を表すstringはちょうどk回繰り返します.注意kは正の整数であることを保証する.
入力文字列は常に有効であると考えられます.入力文字列には余分なスペースがなく、入力した四角カッコは常にフォーマットの要件を満たしています.
また、元のデータには数字は含まれておらず、すべての数字は重複回数kのみを表し、例えば3 aや2[4]のような入力は現れないと考えられます.
例:s="3[a]2[bc],は"aaabcbc"を返す.s="3[a 2[c]",は"accaccacc"を返す.s=「2[abc]3[cd]ef」で、「abcabccdcdef」を返します.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/decode-string著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
プリシールコード
class Solution {
public:
string gs;
int pos;
int getdigit(){
int ans=0;
while(pos<gs.size()&&isdigit(gs[pos])) ans=ans*10+gs[pos++]-'0';//
return ans;
}
string getstring(){
if(pos==gs.size()||gs[pos]==']') return "";
string res="";
int tmp;
int i;
string tmps;
if(isalpha(gs[pos])) res=res+gs[pos++];//
else{
tmp=getdigit();//
pos++;//
tmps=getstring();//
pos++;//
for(i=0;i<tmp;i++) res=res+tmps;//
}
return res+getstring();// , —— , ; ,
}
string decodeString(string s) {
gs=s;
pos=0;
return getstring();
}
};
注釈:素朴な問題で、答えに倣っていくつかの細部を処理し、書かれたコードを処理しました.大体の構想は、目標列gsに沿って後に読んで、数字を読んで数字で処理して、アルファベットの部分を読んで再帰的に処理して、1つの']'の部分を読むたびに数字で1ラウンドコピーして、それからこの列に戻ります;
isdigitとisalphaの2つの関数は初めて出会って、勉強します;
再帰処理文字列は、頭がはっきりしていて、どの文字がどのように処理されているのか、再帰の原則は何なのかを読んでいます.これらの問題をしっかり把握して解決した.