华为机试之查找兄弟单词

本博客探讨了如何解决一个LeetCode问题——查找给定单词的兄弟单词,即字母顺序交换后的不同单词。文章提供了两种解法,分别通过创建Map记录字符频率和直接比较字符数组的排列来判断是否为兄弟单词。并详细介绍了每种解法的思路和代码实现。
摘要由CSDN通过智能技术生成

1>题目描述

  • 题目描述:
    • 定义一个单词的“兄弟单词”为:交换该单词字母顺序,而不添加、删除、修改原有的字母就能生成的单词。
    • 兄弟单词要求和原来的单词不同。例如:ab和ba是兄弟单词。ab和ab则不是兄弟单词。
    • 现在给定你n个单词,另外再给你一个单词str,让你寻找str的兄弟单词里,字典序第k大的那个单词是什么?
    • 注意:字典中可能有重复单词。本题含有多组输入数据。
  • 输入描述:
    • 先输入单词的个数n,再输入n个单词。
    • 再输入一个单词,为待查找的单词x
    • 最后输入数字k
  • 输出描述:
    • 输出查找到x的兄弟单词的个数m
    • 然后输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。

2>解法一

  • 1、筛选兄弟单词
    • 相同的单词不是兄弟单词
    • 长度不相同的一定不是兄弟单词
    • 拥有相同字母并且个数一致的不相同单词是兄弟单词
  • 2、对于每一个字符串创建一个Map来存储它对应字符以及对应字符的个数
  • 3、通过equals方法来比较是否一致来判断兄弟单词

2.1、代码实现

import java.util.*;
public class Main{
   
    public static void main(String[] args){
   
        Scanner sc = new Scanner(System.in);
        int length = sc.nextInt();
        String[] arr = new String[length]; 
        for(int i=0;i<length;i++){
   
            arr[i] = sc.next();
        }
        String str = sc.next();
        int n = sc.nextInt();
        Match(arr,str,n);
    }
    public static Map<Character,Integer> getMap(String str){
   
        Map<Character,Integer> map = new HashMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值