题目摘自http://blog.csdn.net/dongyi91/article/details/38639915 写了2个小时,水平太菜了
入法的编码原理为:根据已有编码表,当输入拼音和数字后输出对应的字符。例如:
有如下编码:喜_xi 洗_xi 系_xi 无_wu 五_wu(字符和拼音之间用下划线隔开),那么当输入xi2时,结果为拼音位xi的第二个字符,即“洗”。
输入:Code
喜_xi
洗_xi
系_xi
无_wu
五_wu
Search
xi2
End
输出:洗
注意:当在编码表中查询不到时,结果为“Error”;当输入的拼音没有数字,即"xi"时,输出结果为:拼音为xi的前若干个字符,但是最多输出5个,即输出:喜;洗;系。
考察点:字符串的分割、字符串转化为整型、multimap的使用(key为拼音,value为对应字符)。
package 华为机试; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Scanner; public class Main4 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scn=new Scanner(System.in); //读取code HashMap<String,ArrayList<String>> hash=new HashMap<String,ArrayList<String>>(); String cur=scn.next(); while(!cur.equals("Search")) { String s[]=cur.split("_"); // System.out.println(s[0]+"--"+s[1]); if(hash.get(s[1])==null) { ArrayList arry=new ArrayList<String>(); arry.add(s[0]); hash.put(s[1],arry); } else { hash.get(s[1]).add(s[0]); } cur=scn.next(); } //输出hash值 /* Iterator<String> iter=hash.keySet().iterator(); while(iter.hasNext()) { System.out.println(iter.next()); } */ cur=scn.next(); while(!cur.equals("End")) { char last=cur.charAt(cur.length()-1); System.out.println("cur"+ last); //分离出数字 if(last>='0'&&last<='9') //最后一位是是否有数字 { int i; for( i=0;i<cur.length();i++) { char c=cur.charAt(i); if(c>'0'&&c<='9') break; } String key=cur.substring(0,i); int pos=Integer.valueOf(cur.substring(i)); if(hash.get(key)==null) System.out.println("Error"); else { System.out.println(hash.get(key).get(pos)); } } else //不是数字直接输出前5个,如果有的话 { int count=0; for(String s:hash.get(cur)) { System.out.println(s); count++; if(count==5) break; } } cur=scn.next(); } } }