ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java机试题:查找兄弟单词(使用正则以及不使用正则的思路)

2022-01-22 14:02:58  阅读:170  来源: 互联网

标签:le word 试题 temp int brother 单词 正则 Java


描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。 兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。 现在给定你 n 个单词,另外再给你一个单词 str ,让你寻找 str 的兄弟单词里,按字典序排列后的第 k 个单词是什么? 注意:字典中可能有重复单词。本题含有多组输入数据。   数据范围:1 \le n \le 1000 \1≤n≤1000 ,输入的字符串长度满足 1 \le len(str) \le 10 \1≤len(str)≤10  , 1 \le k < n \1≤k<n 

输入描述:

先输入单词的个数n,再输入n个单词。 再输入一个单词,为待查找的单词x 最后输入数字k

输出描述:

输出查找到x的兄弟单词的个数m 然后输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * 
 * 思路:找到兄弟单词。兄弟单词的判断条件:长度相等,两个词不一样,包含的字符要一样,包含的个数要一样,利用正则判断。【不使用正则的判断思路:这里还可以将字符串中的字母进行排序,然后对比单词是否一样判断,这里我用正则判断】
 * 有重复的,所以不用treeSet来排序,用 Collections.sort(brother);
 *
 */
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
    
        while (in.hasNextInt()) {
            int num = in.nextInt();
            List<String> all = new ArrayList<String>();
            for (int i = 0; i < num; i++) { 
                all.add(in.next());
            }
            String word = in.next();
            int outIndex = in.nextInt() - 1;
            List<String> brother = new ArrayList<String>();
            for (int i = 0; i < all.size(); i++) {
                String temp = all.get(i);
                if(checkBrother(word,  temp)) {
                    brother.add(temp);
                };
            }
            Collections.sort(brother);
            System.out.println(brother.size());
            if(brother.size() > outIndex) {
                System.out.println(brother.get(outIndex));
            }
            
        }

        
        
    }

    private static boolean checkBrother(String word, String temp) {
        boolean match = true;
        if(temp.length() == word.length() && !temp.equals(word)) {
            for (int j = 0; j < word.length(); j++) {
                char tempChar = word.charAt(j);
                if(temp.indexOf(word.charAt(j))< 0 || temp.replaceAll("[^"+tempChar+"]","").length() !=  word.replaceAll("[^"+tempChar+"]","").length()) {
                    match = false;
                    break;
                }
            }
        } else {
            match = false;
        }
        return match;
        
    }
}

 

标签:le,word,试题,temp,int,brother,单词,正则,Java
来源: https://www.cnblogs.com/duiyuedangge/p/15833532.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有