题解 | #查找兄弟单词#

查找兄弟单词

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

注意点:

  • 兄弟单词的判断:若两个字符串长度相等且内容不同,则将两字符串转字符数组,排序后比较即可;也可用hash结构法。
  • 兄弟单词是可以重复。 比如:输入[2 abc abc cba 1],则兄弟单词列表是[abc, abc],size是2。
  • 坑:案例中有兄弟列表size是1,但是要求输出第3个兄弟单词的情况,就会报数组下标异常,所以在输出兄弟单词前加个条件即可。
import java.util.*;
public class HJ27查找兄弟单词 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String line = in.nextLine();
            String[] orderStr = line.split(" ");
            // 构建兄弟单词列表并打印列表大小
            List wordList = new ArrayList();
            int wordNum = Integer.parseInt(orderStr[0]);
            for (int i = 1; i <= wordNum; i++)
                if (checkBrother(orderStr[i], orderStr[orderStr.length - 2]))
                    wordList.add(orderStr[i]);
            System.out.println(wordList.size());
            // 按字典顺序排序后输出
            if (!wordList.isEmpty()) {
                wordList.sort(Comparator.naturalOrder());
                int i = Integer.valueOf(orderStr[orderStr.length - 1]) - 1;
                // 若超出数组下表则不输出(坑!)
                if (i <= wordList.size() - 1)
                    System.out.println(wordList.get(i));;
            }
        }
    }
    /**
     * 字符排序法
     * 判断是否为兄弟单词
     * @param str1
     * @param str2
     * @return
     */
    public static boolean checkBrother(String str1, String str2) {
        // 长度不相等或内容相等不是兄弟单词
        if (str1.length() != str2. length() || str1.equals(str2))
            return false;
        // 排序比较
        char[] chars1 = str1.toCharArray();
        char[] chars2 = str2.toCharArray();
        Arrays.sort(chars1);
        Arrays.sort(chars2);
        return Arrays.equals(chars1, chars2);
    }
}

全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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