题目来源
题目描述
题目解析
本题考察栈操作和字符串切割。
容易观察到当遇到]
时就要进行解压操作
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <iostream>
#include <stack>
using namespace std;
class Solution{
public:
std::string expandStr(std::string str){
std::stack<std::string> stack;
int i = 0;
while (i < str.size()){
if(isalpha(str[i])){
int j = i;
while (j < str.size() && isalpha(str[j])){ // 找到第一个不是字母的位置
j++;
}
stack.push(str.substr(i, j - i));
i = j; // 现在j指向一个不是字母的数字
}else if(isdigit(str[i])){
int j = i;
while(j < str.size() && isdigit(str[j])){ // 找到第一个不是数字的位置
j++;
}
stack.push(str.substr(i, j - i));
i = j ; // 现在j指向一个不是数字的字符
}else if(str[i] == ']'){
std::string currStr = stack.top(); stack.pop();
int currCnt = stoi(stack.top()); stack.pop();
std::string tmpStr;
while (currCnt > 0){
tmpStr.append(currStr);
currCnt--;
}
if(stack.empty()){
stack.push(tmpStr);
}else{
stack.top() += tmpStr;
}
i++;
}else{ // [
i++;
}
}
std::string ans;
while (!stack.empty()){
ans = stack.top() + ans; stack.pop();
}
return ans;
}
};
int main()
{
//kkk, mnaaaaamnaaaaa
Solution a;
std::cout << a.expandStr("3[k]2[mn1[a2[b]]]");
}