标签:String Alphabet 解码 Decrypt mapping https res com string
You are given a string s
formed by digits and '#'
. We want to map s
to English lowercase characters as follows:
- Characters (
'a'
to'i'
) are represented by ('1'
to'9'
) respectively. - Characters (
'j'
to'z'
) are represented by ('10#'
to'26#'
) respectively.
Return the string formed after mapping.
The test cases are generated so that a unique mapping will always exist.
Example 1:
Input: s = "10#11#12"
Output: "jkab"
Explanation: "j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -> "2".
Example 2:
Input: s = "1326#"
Output: "acz"
Constraints:
1 <= s.length <= 1000
s
consists of digits and the'#'
letter.s
will be a valid string such that mapping is always possible.
这道题给了一个数字字符串,让解码成字母串,指定的规则是1到9分别对应a到i,j到z分别对应从 10#
到 26#
,注意后面跟的井号表示这是个两位数,不然不好区分 26 到底是z,还是b和f。那么在解码的时候,这个井号就特别重要,因为它代表着解码的方式,而且对于当前位置来说,它的位置也是固定的,所以解码的方法也就有了:判断下下一个字符是否是井号,是的话解码一个两位数,当然要首先保证不会越界,需判断 i+2 小于n,同时 s[i+2] 是井号,然后即可解析出两位数,转化为对应的字母,之后别忘了i要自增2,因为要跳过井号。否则的话就只解析当前位置的数字,转化为a到i之间的字母,参见代码如下:
class Solution {
public:
string freqAlphabets(string s) {
string res = "";
int n = s.size();
for (int i = 0; i < n; ++i) {
if (i + 2 < n && s[i + 2] == '#') {
res += (stoi(s.substr(i, 2)) - 1 + 'a');
i += 2;
} else {
res += (s[i] - '0' - 1 + 'a');
}
}
return res;
}
};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/1309
参考资料:
https://leetcode.com/problems/decrypt-string-from-alphabet-to-integer-mapping/
LeetCode All in One 题目讲解汇总(持续更新中...)
标签:String,Alphabet,解码,Decrypt,mapping,https,res,com,string 来源: https://www.cnblogs.com/grandyang/p/16414946.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。