news 2026/7/10 23:02:08

UVa 642 Word Amalgamation

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 642 Word Amalgamation

题目描述

给定一个包含若干单词的字典(单词由小写字母组成,长度111666,且不重复),字典以一行六个大写字母X"XXXXXX"结束。随后输入若干个待解乱的单词(scrambled words\texttt{scrambled words}scrambled words),同样以"XXXXXX"结束。对于每个待解乱单词,要求找出字典中所有可以由该单词的字母重新排列而成的单词(即字母异位词),并按字典序输出。若没有匹配的单词,则输出"NOT A VALID WORD"。每个查询结果后输出一行六个星号"******"

输入格式

输入包含四部分:

  1. 字典,每行一个单词,以"XXXXXX"结束。
  2. 若干待解乱单词,每行一个,以"XXXXXX"结束。

所有单词均由小写字母组成,长度111666。字典中的单词不重复,但不一定按字典序排列。

输出格式

对于每个待解乱单词,输出一行"NOT A VALID WORD"(若无匹配),否则按字典序输出所有匹配的字典单词,每行一个。无论是否有匹配,最后输出一行六个星号"******"

样例

输入

tarp given score refund only trap work earn course pepper part XXXXXX resco nfudre aptr sett oresuc XXXXXX

输出

score ****** refund ****** tarp trap ****** NOT A VALID WORD ****** course ******

题目分析

本题是经典的“异位词查找”问题。字典大小最多100100100,单词长度不超过666,查询数量未知但通常不多。由于规模极小,可以直接对每个查询遍历整个字典,判断两个单词排序后的字符串是否相同。为了确保输出顺序字典序,可以在读入字典后按原始单词排序。这样在匹配时按顺序输出即可。

解题思路

  1. 读入字典单词,存入结构体数组,每个结构体包含原始单词word和其排序后的字符串sorted(将word的字母排序)。
  2. 按原始单词对结构体进行升序排序,以保证输出时按字典序。
  3. 对于每个查询单词:
    • 将其字母排序得到target
    • 遍历字典结构体数组,若sorted == target,则输出word
    • 若无匹配,则输出"NOT A VALID WORD"
    • 最后输出"******"

由于单词长度很短,排序操作非常快。总复杂度O((D+Q)⋅Llog⁡L)O((D + Q) \cdot L \log L)O((D+Q)LlogL),其中D≤100D \le 100D100QQQ未知,L≤6L \le 6L6,完全可接受。

复杂度分析

  • 预处理字典:排序每个单词O(D⋅Llog⁡L)O(D \cdot L \log L)O(DLlogL),整体排序O(Dlog⁡D)O(D \log D)O(DlogD)
  • 每个查询:排序查询单词O(Llog⁡L)O(L \log L)O(LlogL),遍历字典O(D)O(D)O(D)次比较字符串(O(L)O(L)O(L)),总O(Q⋅D⋅L)O(Q \cdot D \cdot L)O(QDL)
  • 空间复杂度O(D⋅L)O(D \cdot L)O(DL)

代码实现

// Word Amalgamation// UVa ID: 642// Verdict: Accepted// Submission Date: 2016-08-25// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;structitem{string word,sorted;booloperator<(constitem&another)const{returnword<another.word;}};intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);vector<item>items;string line;while(getline(cin,line),line.front()!='X'){string backup=line;sort(line.begin(),line.end());items.push_back((item){backup,line});}sort(items.begin(),items.end());while(getline(cin,line),line.front()!='X'){sort(line.begin(),line.end());booloutputed=false;for(autodata:items)if(data.sorted==line){outputed=true;cout<<data.word<<'\n';}if(!outputed)cout<<"NOT A VALID WORD\n";cout<<"******\n";}return0;}

总结

本题通过将单词按字母排序作为“特征串”,将异位词匹配转化为字符串相等比较,实现简单高效。由于数据规模很小,直接遍历字典即可。注意输出格式:每个查询结果后必须紧跟六个星号,无论是否有匹配。该解法清晰直观,是处理字母重排问题的常用技巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 23:02:00

Linux之进程(六)--环境变量

了解main的参数我们直接来看一下这个函数我们可以合理推测这个argc是记录命令行参数的的个数多少,而argv[]记录命令行的具体命令我们来做一个小demo初步实现linux的命令行,留个印象我们来思考一下为什么要有命令行参数命令行参数本质上是为了实现一个命令,根据不同的子选项,来实…

作者头像 李华
网站建设 2026/7/10 22:59:29

单 RGB 摄像头实现复杂环境导航!Robostral Navigate 成功率达 76.6%

导航模型 Robostral Navigate&#xff1a;单相机实现复杂环境自主导航产品与服务导航联系销售。菜单包括产品、解决方案、研究、开发者、博客、客户、公司。还可开始构建。产品介绍有 Studio 用于构建、测试和运行 AI 智能体和应用程序&#xff1b;Forge 用于训练、校准和评估自…

作者头像 李华
网站建设 2026/7/10 22:57:24

【LeetCode 手撕算法】(细节知识点总结)

一、Array类List类1、排序Arrays.sort(nums); Array要加s2、ArrayList<Integer> maxlist new ArrayList<>(); ArrayList里面两个大写3、数组固定不变用 .length&#xff0c;ArrayList可变用 .size()4、ArrayList 访问下标用 .get(i) ,数组才可以直接arr[…

作者头像 李华
网站建设 2026/7/10 22:56:05

如何构建自进化企业级 Agent 平台

从个人助手到多租户平台:为什么"再开几个进程"行不通 本系列教程以 AgentScope Java Harness 的 Builder 架构为蓝本,深度解析如何设计一个"一套自进化 Agent、一个组织共用"的多租户平台。适合正在构建企业级 Agent 平台的架构师和开发者。 前言:一套代…

作者头像 李华
网站建设 2026/7/10 22:54:11

浏览器自动化_agent-browser

以下为本文档的中文说明agent-browser 是一个浏览器自动化 CLI 工具技能&#xff0c;为 AI 代理提供完整的浏览器操控能力。它允许 AI 通过命令行接口执行各种浏览器操作&#xff0c;包括页面导航、表单填写、按钮点击、屏幕截图、页面数据提取、阅读浏览器标签页上下文等。该技…

作者头像 李华
网站建设 2026/7/10 22:53:08

OpenClaw基础学习

在OpenClaw从零开始&#xff08;篇一&#xff0c;初识OpenClaw&#xff09;_认识openclaw-CSDN博客 【OpenClaw到底是什么&#xff1f;一只龙虾如何搅动整个AI圈&#xff01;】 https://www.bilibili.com/video/BV1AcwczbEkN/?share_sourcecopy_web&vd_source7c2b5de7032b…

作者头像 李华