题解 | #查找兄弟单词#
查找兄弟单词
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)); } } } }