题解 | #查找兄弟单词#

查找兄弟单词

http://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            List<String> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                list.add(scan.next().toString());
            }
            String str = scan.next().toString();
            int index = scan.nextInt();
            int[] arr = new int[53];
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                if (c >= 'a' && c <= 'z') arr[c - 'a']++;
                else arr[c - 'A' + 26]++;
            }
            List<String> brother = new ArrayList<>();
            for (String s : list) {
              	//要排除长度不同 或者是完全一样的
                if (s.length() != str.length() || s.equals(str)) continue;
                if (isValid(s, arr)) brother.add(s); 
            }
            Collections.sort(brother);//字典序升序
            
            System.out.println(brother.size());
            if (index - 1 < brother.size() && index - 1 >= 0) {
              	//越界就不输出
                System.out.println(brother.get(index - 1));
            }
        }
    }
	/**
    * 用来判度 两个字符串是否含有相同元素
    */
    public static boolean isValid(String s, int[] a) {
        int[] arr = a.clone();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c >= 'a' && c <= 'z') {
                if (arr[c - 'a'] <= 0) return false;
                arr[c - 'a']--;
            }else {
                if (arr[c - 'A' + 26] <= 0) return false;
                arr[c - 'A' + 26]--;
            }
        }
        for (int i : arr) {
            if (i != 0) return false;
        }
        return true;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务