题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE&
输入
4 EIGHT ZEROTWOONE OHWETENRTEO OHEWTIEGTHENRTEO
输出
0 234 345 0345
数字减8的操作很容易实现,即通过字母转换的数字中8-9对应0-1; 0-7对应2-9
对于输出要求最小号码,只需要将数字从小到大排列即可
重点在于从打乱的字母到数字的映射,仔细观察以下特点:
- 某些字母与数字(下文的红色字母)之间有一一映射的关系:'Z' -->0; ''W'-->2; 'X'-->6; 'G'-->8。那么只要有对应的字母存在,就意味着有该数字,且数字出现的次数与字母出现的次数相同
- 通过第一步操作,我们得出了数字0/2/6/8出现的次数,我们可以推算出仅仅与他们有字母交集的其他数字,如’S‘仅存在6和7中,那么7出现的次数就等于'S'出现的次数-6的次数。同理我们可以得到一下几个数字
- ’S‘-6=7
- 'V'-7=5
- 'F'-5=4
- 'H'-8=3
- 最后剩下数字1和9,有公共的字幕N和E,因此,1需要通过’O‘来确定,1 = ’O‘-0-2-4; 9通过字母’I‘来确定,9=’I‘-5-6
.indexOf()用法
- private static void testIndexOf() {
- String string = "aaa456ac";
- //查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1.
- System.out.println(string.indexOf("b"));//indexOf(String str);返回结果:-1,"b"不存在
- // 从第四个字符位置开始往后继续查找,包含当前位置
- System.out.println(string.indexOf("a",3));//indexOf(String str, int fromIndex);返回结果:6
- //(与之前的差别:上面的参数是 String 类型,下面的参数是 int 类型)参考数据:a-97,b-98,c-99
- // 从头开始查找是否存在指定的字符
- System.out.println(string.indexOf(99));//indexOf(int ch);返回结果:7
- System.out.println(string.indexOf('c'));//indexOf(int ch);返回结果:7
- //从fromIndex查找ch,这个是字符型变量,不是字符串。字符a对应的数字就是97。
- System.out.println(string.indexOf(97,3));//indexOf(int ch, int fromIndex);返回结果:6
- System.out.println(string.indexOf('a',3));//indexOf(int ch, int fromIndex);返回结果:6
- //这个就是灵活运用String类提供的方法,拆分提供的字符串。
- //String s = "D:\\Android\\sdk\\add-ons";
- //System.out.println(s);
- //while (s.lastIndexOf("\\") > 0) {
- // s = s.substring(0, s.lastIndexOf("\\"));
- // System.out.println(s);
- //}
- }