题解 | #查找兄弟单词#

查找兄弟单词

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


        }
    }
}

全部评论

相关推荐

白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务