题目:
给你一个字符串 s,它由数字(‘0’ - ‘9’)和 ‘#’ 组成。我们希望按下述规则将 s 映射为一些小写英文字符:
字符(‘a’ - ‘i’)分别用(‘1’ - ‘9’)表示。
字符(‘j’ - ‘z’)分别用(‘10#’ - ‘26#’)表示。
返回映射之后形成的新字符串。
题目数据保证映射始终唯一。
思路分析:
对字符串 s 进行顺序遍历。当遍历到位置 i 时,我们首先向后看两个字符,如果 s.charAt(i+2)存在且为 ‘#’,那么位置 i,i + 1 和 i + 2 表示一个 ‘j’ 到 ‘z’ 之间的字符,否则位置 i 表示一个 ‘a’ 到 ‘i’ 的字符。
class Solution {
public String freqAlphabets(String s) {
StringBuffer sb=new StringBuffer();
int len=s.length();
for(int i=0;i<len;i++){
if((i+2)<len&&s.charAt(i+2)=='#'){
sb.append((char)((s.charAt(i) - '0') * 10 + (s.charAt(i+1) - '1') + 'a'));
i+=2;
}else{
sb.append((char)((s.charAt(i)-'1')+'a'));
}
}
return sb.toString();
}
}