java版正确题解,排行第一的代码都是什么鬼
配置文件恢复
http://www.nowcoder.com/questionTerminal/ca6ac6ef9538419abf6f883f7d6f6ee5
题解比较少,我来写一个吧。
关键点:
1.先判断输入字符串的长度,长度为1时,只匹配关键词为1的字符串,比如输入r只能匹配reset,同理长度为2的只能匹配关键词长度为2的字符串,比如输入r b,只能匹配reset board和reboot backplane。
2.如果匹配出的结果不唯一,也就是匹配到两个,则匹配不成功。比如输入r b,匹配reset board和reboot backplane,用计数器可以解决,此时输出 unknown command
import java.util.*; //字符串匹配:1.先看匹配串是一个字符还是两个字符,一个字符时,看匹配的字符是单字符还是双字符,单字符可以,双字符不行 //2.匹配串是两个字符时,看匹配了几个,只能匹配一个的话,算成功。大于一种,算不成功 public class MainHJ66 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Map<String, String> map = new HashMap<>(); map.put("reset","reset what"); map.put("reset board","board fault"); map.put("board add","where to add"); map.put("reboot backplane","impossible"); map.put("backplane abort","install first"); map.put("board delete","no board at all"); map.put("noMatch","unknown command"); Set<String[]> str = new HashSet<>(); for (String s: map.keySet() ) { str.add(s.split(" ")); } while (sc.hasNext()){ String[] arr = sc.nextLine().split(" "); String res = "noMatch"; int count = 0; for (String[] s: str ) { if (arr.length==1){ if (s.length==2) continue; else { if (s[0].startsWith(arr[0])) res = s[0]; } } if (arr.length==2){ if (s.length==1) continue; else{ if (s[0].startsWith(arr[0]) && s[1].startsWith(arr[1])) { res = s[0] + " " + s[1]; count++; } } } } System.out.println(count>1? "unknown command":map.get(res)); } } }