算法题目0226-寻找相似单词

该文章描述了一个编程问题,要求读取一个包含多个单词的字典和一个目标单词,找出所有与目标单词通过交换字母位置形成的相似单词,并按字典序排序。提供的Java代码示例实现了这一功能,对输入的单词进行处理并判断是否为相似单词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寻找相似单词

题目描述

给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)。
相似单词说明:给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么定义Y是X的相似单词,如abc、bca即为相似单词(大小写是不同的字母,如a和A算两个不同字母)。
字典序排序: 大写字母<小写字母。同样大小写的字母,遵循26字母顺序大小关系。即A<B<C<…<X<Y<Z<a<b<c<…<x<y<z. 如Bac<aBc<acB<cBa.

输入描述

第一行为给定的单词个数N(N为非负整数)

从第二行到地N+1行是具体的单词(每行一个单词)

最后一行是指定的待检测单词(用于检测上面给定的单词中哪些是与该指定单词是相似单词,该单词可以不是上面给定的单词)

输出描述

从给定的单词组中,找出指定单词的相似单词,并且按照从小到大字典序排列输出,中间以空格隔开

如果不存在,则输出null(字符串null)

示例一

输入

4
abc
dasd
tad
bca
abc

输出

abc bca

说明
在给定的输入中,与abc是兄弟单词的是abc bca,且输出按照字典序大小排序,输出的所有单词以空格隔开

示例二

输入

4
abc
dasd
tad
bca
abd

输出

null

说明
给定单词组中,没有与给定单词abd是兄弟单词,输出为null(字符串null)

参考解题 Java

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: Amos
 * @E-mail: amos@amoscloud.com
 * @Date: 2023/2/15
 * @Time: 11:24
 * @Description:
 */
public class Main0226 {
  public static void main(String[] args) {
      try (Scanner scanner = new Scanner(System.in)) {
          String num = scanner.nextLine();
          int parseInt = Integer.parseInt(num);
          List<String> inputList = new ArrayList<>();
          for (int i = 0; i < parseInt; i++) {
              inputList.add(scanner.nextLine());
          }
          String target = scanner.nextLine();
          StringBuilder result = new StringBuilder();
          for (String s : inputList) {
              solution(s, target, result);
          }
          if (result.length() > 0) {
              System.out.println(result);
          } else {
              System.out.println("null");
          }
      }
  }

   public static void solution(String source, String target, StringBuilder result) {
        if (source.length() != target.length()) {
            return;
        }
        if (source.equals(target)) {
            result.append(source + " ");
            return;
        }
        char[] charArray = source.toCharArray();
        Arrays.sort(charArray);
        String s = new String(charArray);
        if (s.equals(target)) {
            result.append(source + " ");
            return;
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值