题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.*;
import java.util.stream.*;
import java.math.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
Integer counter = in.nextInt();
Map<String, BigDecimal> mulValMap = new HashMap<>();
Map<String, BigDecimal> addValMap = new HashMap<>();
final List<String> allWords = new ArrayList<>();
IntStream.range(1, counter + 1).forEach(x-> {
String v = in.next();
char[] ch = v.toCharArray();
BigDecimal mulVal = BigDecimal.ONE;
BigDecimal addval = BigDecimal.ZERO;
for (char c : ch) {
BigDecimal curCharval = BigDecimal.valueOf( Integer.valueOf(c));
mulVal = mulVal.multiply(curCharval);
addval = addval.add(curCharval);
}
mulValMap.put(v, mulVal);
addValMap.put(v, addval);
allWords.add(v);
});
String word = in.next();
mulValMap.remove(word);
addValMap.remove(word);
Integer index = in.nextInt();
char[] ch = word.toCharArray();
BigDecimal wordmulVal = BigDecimal.ONE;
BigDecimal wordaddval = BigDecimal.ZERO;
for (char c : ch) {
BigDecimal curCharval = BigDecimal.valueOf( Integer.valueOf(c));
wordmulVal = wordmulVal.multiply(curCharval);
wordaddval = wordaddval.add(curCharval);
}
List<String> sortedAllWords = allWords.stream().sorted((o1,o2)->{
return o1.compareTo(o2);
}).collect(Collectors.toList());
List<String> brothers = new ArrayList<>();
for(String key:sortedAllWords){
BigDecimal v1= mulValMap.get(key);
BigDecimal v2= addValMap.get(key);
if(!key.equals(word) && v1.equals(wordmulVal) && v2.equals(wordaddval)){
brothers.add(key);
}
}
System.out.println(brothers.size());
if(brothers.size()>0 && brothers.size()>=index){
System.out.println(brothers.get(index-1));
}
}
}
}

查看1道真题和解析