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));
}
}
}

查看22道真题和解析