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