题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", ...

输入

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()用法

  1. private static void testIndexOf() {  
  2.     String string = "aaa456ac";  
  3.   
  4.     //查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1.  
  5.     System.out.println(string.indexOf("b"));//indexOf(String str);返回结果:-1,"b"不存在  
  6.   
  7.     // 从第四个字符位置开始往后继续查找,包含当前位置  
  8.     System.out.println(string.indexOf("a",3));//indexOf(String str, int fromIndex);返回结果:6  
  9.   
  10.     //(与之前的差别:上面的参数是 String 类型,下面的参数是 int 类型)参考数据:a-97,b-98,c-99  
  11.   
  12.     // 从头开始查找是否存在指定的字符  
  13.     System.out.println(string.indexOf(99));//indexOf(int ch);返回结果:7  
  14.     System.out.println(string.indexOf('c'));//indexOf(int ch);返回结果:7  
  15.   
  16.     //从fromIndex查找ch,这个是字符型变量,不是字符串。字符a对应的数字就是97。  
  17.     System.out.println(string.indexOf(97,3));//indexOf(int ch, int fromIndex);返回结果:6  
  18.     System.out.println(string.indexOf('a',3));//indexOf(int ch, int fromIndex);返回结果:6  
  19.   
  20.     //这个就是灵活运用String类提供的方法,拆分提供的字符串。  
  21.     //String s = "D:\\Android\\sdk\\add-ons";  
  22.     //System.out.println(s);  
  23.     //while (s.lastIndexOf("\\") > 0) {  
  24.     //    s = s.substring(0, s.lastIndexOf("\\"));  
  25.     //    System.out.println(s);  
  26.     //}  
  27. }  

 

转载于:https://www.cnblogs.com/Syiren/p/8717049.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值