算法:HJ27 查找兄弟单词

news2024/11/16 1:20:09

描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。

兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。

现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?

注意:字典中可能有重复单词。

数据范围:1≤�≤1000 1≤n≤1000 ,输入的字符串长度满足 1≤���(���)≤10 1≤len(str)≤10  , 1≤�<� 1≤k<n 

输入描述:

输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k

输出描述:

第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。

示例1

输入:

3 abc bca cab abc 1

复制输出:

2
bca

复制

示例2

输入:

6 cab ad abcd cba abc bca abc 1

复制输出:

3
bca

复制说明:

abc的兄弟单词有cab cba bca,所以输出3
经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca         

我的代码

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static boolean checkStr(String chars, String xStr) {
        Map<Character, Integer> map = new LinkedHashMap();
        Map<Character, Integer> map2 = new LinkedHashMap();
        for (int i = 0; i < chars.length(); i++) {
            map.put(chars.charAt(i), map.getOrDefault(chars.charAt(i), 0) + 1);
        }

        for (int i = 0; i < xStr.length(); i++) {
            map2.put(xStr.charAt(i), map2.getOrDefault(xStr.charAt(i), 0) + 1);

        }
        if (map.equals(map2)) {
            return true;
        }

        return false;
    }
    

    public static void main(String[] args) {
         Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String [] arr = new String[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.next();
        }
        String xStr = scanner.next();
        int k = scanner.nextInt();
        char[] chars = xStr.toCharArray();
        int count = 0;
        String result = null;
        for (int i = 0; i < n; i++) {
            if(arr[i].length() != xStr.length()){
                continue;
            }
            if(arr[i].equals(xStr)){
                continue;
            }
            if(!checkStr(arr[i],xStr) ){
                continue;
            }
            count++;

            if(count==k){
                result = arr[i];
            }
        }
        System.out.println(count);
        if(result!= null)  System.out.println(result);
        
    }

}

 

参考别人的之后写的:

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static boolean isBroStr(String chars, String xStr){
        if(chars.length() != xStr.length() || chars.equals(xStr)){
                return false;
        }
        char[] chars1 = chars.toCharArray();
        char[] chars2 = xStr.toCharArray();
        Arrays.sort(chars1);
        Arrays.sort(chars2);

         if(String.valueOf(chars1).equals(String.valueOf(chars2))){
            return true;
        }
        return false;
    }


    public static void main(String[] args) {
          Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String [] arr = new String[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.next();
        }

        String xStr = scanner.next();
        int k = scanner.nextInt();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < arr.length ; i++) {
            if(isBroStr(arr[i],xStr)){
                list.add(arr[i]);
            }
        }

        System.out.println(list.size());
        if(list.size() >= k){
            Collections.sort(list);
            System.out.println(list.get(k-1));
        }

        
    }

知识点:

1.map之间也可以用equals比较

2. char []不能用equals比较

3.Arrays.的数组排序

4.Collections工具的排序

5.k值大于兄弟字符串个数的情况未考虑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/817469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

职业发展规划指南:如何成为成功的产品经理

导语&#xff1a;产品经理是当今互联网时代最炙手可热的职位之一。作为连接技术、商业和用户需求的桥梁&#xff0c;产品经理在公司中扮演着至关重要的角色。本文将为你提供一些关于产品经理职业发展的规划指南&#xff0c;帮助你在这个领域取得成功。 掌握核心技能&#xff1…

修复navicat 不可用

第一步&#xff1a;关闭Navicat 第二步&#xff1a;打开注册表编辑器&#xff0c;win R, 输入regedit 第三步&#xff1a; 在最上方搜索框输入HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium 将Registration15XCS文件夹 和 Update文件夹删除 第四步&#xff1a; 在…

Jenkins工具系列 —— Jenkins 安装并启动

文章目录 安装涉及相关链接选择安装Jenkins版本安装JenkinsJenkins web页面启动 安装涉及相关链接 Jenkins官网&#xff1a; https://www.jenkins.io/zh/ Jenkins下载安装步骤&#xff1a; https://www.jenkins.io/zh/download/ 安装各种版本OpenJDK&#xff1a; https://blog…

netty3和netty4 的区别

netty3和netty4 的区别 目录概述需求&#xff1a; 设计思路实现思路分析1.区别 拓展实现性能参数测试&#xff1a; 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better…

SpringBoot项目中使用Lombok插件中Slf4j日志框架

前言&#xff1a;idea需要安装lombok插件&#xff0c;因为该插件中添加了Slf4j注解&#xff0c;可以将Slf4j翻译成 private static final org.slf4j.Logger logger LoggerFactory.getLogger(this.XXX.class); springboot本身就内置了slf4j日志框架&#xff0c;所以不需要单独…

Vue前端框架入门

文章目录 Vue快速入门Vue指令生命周期 Vue 经过一小段时间学习 我认为vue就是在原js上进行的一个加强 简化JS中的DOM操作 vue是分两个层的 一个叫做视图层(View)&#xff0c;你可以理解为展现出来的前端页面 一个叫数据模型层(Model),包含数据和一些数据的处理方法 MVVM就是实…

热度升温 SSOT上海国际智慧办公展览会精彩预告福利放送

上海国际智慧办公展览会&#xff08;SSOT&#xff09;是智慧办公及商用空间智能化解决方案及技术应用的专业平台&#xff0c;本届展会除了将“智联”智能行业&#xff0c;同时会以“智越”为题&#xff0c;与行业共建跨越行业界限之桥梁。 展会将融合应用智慧办公、智慧地产、智…

Flask中flask-session

Flask中flask-session Flask-Session是一个为Flask应用程序开发的工具&#xff0c;允许您轻松处理服务器端会话。会话是存储和追踪用户特定数据的方式。例如&#xff0c;当用户登录到应用程序时&#xff0c;他们的状态&#xff08;即登录状态&#xff09;可以保存在会话中&…

搞清楚 Windows C/C++ 编程中各种编码

最近编写程序,中文乱码问题让很多同学很头疼,那么今天黄老师来帮大家剖析一下: 以 “好人“ 两个字为例: 等会我们使用代码跟踪内存,来查看字节的编码: 先上代码: #include<stdio.h> #include<stdlib.h> #include<windows.h>char * ConvertUT…

PHP-Mysql好运图书管理系统--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页必要的项目知识ThinkPHP的MVCThinkTemplateThinkPHP 6和ThinkPHP 5 phpStudy 设置导数据库前台展示页面后台的管理界面数据库表结构项目目录如图&#xff1a;代码部分&a…

模型法在初中物理中的实例与应用

摘要&#xff1a;模型法是初中物理解题的重要方法&#xff0c;它的优点有方便快捷&#xff0c;易于理解等。文章通过列举模型法在初中物理解题时应用的例子&#xff0c;与模型法在学习与生活中的实际应用&#xff0c;说明了模型法可用性高&#xff0c;易于理解&#xff0c;能让…

UNIX网络编程卷一 学习笔记 第二十六章 线程

在传统UNIX模式中&#xff0c;当一个进程需要另一个实体完成某事时&#xff0c;它就fork一个子进程&#xff0c;并让子进程去执行处理&#xff0c;Unix上大多网络服务器程序就是这么写的。 这种范式多年来一直用得很好&#xff0c;但fork调用存在一些问题&#xff1a; 1.fork调…

揭秘电脑上的几大流氓软件,查看你的设备是否中招?

当我们使用电脑时&#xff0c;不可避免地会接触到各种软件。有些软件为我们提供了便利和安全保障&#xff0c;而另一些则隐藏着不良企图。这些被称为"流氓软件"的程序&#xff0c;可能给我们的电脑带来麻烦、干扰甚至威胁我们的数据安全。让我们一起盘点一下电脑上的…

基于Ko-time的Springboot单体化调用链追踪实践

目录 前言 一、关于Ko-Time 1、是什么&#xff1f; 2、ko-time更新时间线 二、Ko-time怎么用&#xff1f; 1、依赖引入 2、配置集成 3、权限放行 三、链路追踪 1、系统运行 2、链路追踪 3、长时间调用模拟 总结 前言 熟悉微服务的老司机一定了解&#xff0c;在微服务模…

Java - 多态的使用

多态 多态基本介绍 方法或对象具有多种形态。是面向对象的三大特征&#xff0c;多态是建立在封装和继承基础之上的。 多态的具体体现 1、方法的多态&#xff1a; 重写和重载就能体现多态。 2、对象的多态&#xff1a;【背下来&#xff0c;记住】 一个对象的编译类型和运行…

快应用编译前如何统一替换字符串

假设你有一个需求&#xff0c;要把代码里的ad-button替换为div&#xff0c;因为是mi看ad-button不爽。 这还不简单么&#xff0c;webpack有那么多成熟的plugins和loaders&#xff0c;本身我对webpack也只是略知一二&#xff0c;随便一搜网上的解决方案&#xff0c; string-re…

【Java基础教程】(五十)JDBC篇:JDBC概念及操作步骤、主要类与接口解析、批处理与事务处理~

Java基础教程之JDBC &#x1f539;本章学习目标1️⃣ JDBC概念2️⃣ 连接数据库3️⃣ Statement 接口3.1 数据更新操作3.2 数据查询 4️⃣ PreparedStatement 接口4.1 Statement 接口问题4.2 PreparedStatement操作 5️⃣ 批处理与事务处理&#x1f33e; 总结 &#x1f539;本…

C++学习day--16 野指针和空指针

1、什么是野指针&#xff1f; 野指针就是指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09; 造成野指针的原因&#xff1a; 1、指针未初始化 2、指针越界 3、指针指向的空间被释放 规避野指针的方法&#xff1a; 1. 指针初始化 2. 小心指针越界…

【数据分享】2000—2022年250米分辨率逐月归一化植被指数(NDVI)数据(免费获取/全国/分省/分市)

NDVI&#xff0c;全名为Normalized Difference Vegetation Index&#xff0c;中文名称为归一化植被指数。这个指数可以用来定性和定量评价植被覆盖及其生长活力&#xff0c;我们也可以简单地将它理解为体现植被密度和健康状况的一个指标。 之前我们给大家分享过来源于MOD13A3数…

嵌入式面试常见题目收藏(超总结)

​ 这篇文章来自很多博客主和其他网站的作者&#xff0c;如有侵权&#xff0c;联系必删 文章出处标注&#xff1a; https://blog.csdn.net/qq_44330858/article/details/128947083 ***如需PDF或者原稿可私信 *** ***如需PDF或者原稿可私信 *** ***如需PDF或者原稿可私信 *** 1.…