题目:
用哈希表+递归思想解决这道题
#include <unordered_map>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
void dfs(unordered_map<string,string>& hstable,string temp,string& ans)
{
bool flag = false;
string key = "";
string ss;
for (int i = 0; i <temp.size(); i++)
{
if (temp[i] != '$' && !flag)
{
ans.push_back(temp[i]);
}
else if (temp[i] == '$')
{
flag = true;
continue;
}
if (flag)
{
if (temp[i] != '{'&&temp[i] != '}')
{
key.push_back(temp[i]);
}
else if (temp[i] == '}')
{
flag = false;
ss = hstable.find(key)->second;
key.clear();
dfs(hstable,ss,ans);
}
}
}
}
int main()
{
int n;
unordered_map<string, string> hstable;
cin >> n;
string str;
string ans;
for (int i = 0; i < n; i++)
{
getline(cin, str);
if (str == "")
{
i--;
continue;
}
stringstream s(str);
vector<string> vec;
string temp;
while (getline(s, temp, '='))
{
vec.emplace_back(temp);
}
if (i == n - 1)
{
ans = vec[1];
}
hstable.emplace(vec[0], vec[1]);
}
string out;
dfs(hstable, ans, out);
cout << out << endl;
return 0;
}