华为2015 简单 字典输入法 java

题目摘自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(); } } }

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。