编码范围依次累加,所以需要计算的是累加过程中,该字符串之前有多少个字符串。如果觉得题目不好理解,可以先考虑长度为2,长度为3的情况,自己画一下应该就明白了。
题目中可能的字符串长度有:1,2,3,4。
所以可以按照长度对字符串进行分类,对于例子 “bbca”:
我们现在需要计算该编码方法中,排在它前面的字符串有多少个,假设是 y 个,进一步假设这 y 个字符串中,分别有 y1, y2, y3, y4个长度分别为1,2,3,4的字符串。
参考:TX2017秋招笔试题之编码 - 左岸繁华右岸殇 - 博客园
也可以看这儿的分析:2017腾讯校招在线编程----编码_小土豆啊的博客-CSDN博客
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int res = 0;
for(int i = 0; i < s.size(); ++i){
int tmp = 0;
for(int j = 0; j < 4-i; ++j){
tmp += pow(25, j);
}
res += (s[i] - 'a')*tmp;
//每一轮循环都要加一下res
//因为要考虑自身
//
++res;
}
cout << res-1 << endl;
return 0;
}