这种映射题目的一种想法是找到它和初值的差距,然后与初值加和即可。
class Solution {
public:
string freqAlphabets(string s) {
int map = 96; // a前面一个数的ascii码
string res; // 结果字符串
for(int i = 0; i < s.size(); i ++) //遍历s字符串
{
//分两种情况,没遇到‘#’就把单字符添加到res字符串中
if(s[i] != '#')
{
int temp = (int)s[i] - '0';
res += char(temp+map);
}
//遇到'#'就删掉前两个字符,然后把s前两个字符提出来
//并转成与初始值的差值
else
{
res.erase(res.size()-2,2); //删掉res前两个字符
string substr = s.substr(i-2,2); //取s字符串前两个字符,此字符串为差值
char tem = map + atoi(substr.c_str()); //与初始值加和
res += tem;
}
}
return res;
}
};