news 2026/4/25 5:35:18

第 483 场周赛Q2——3799. 单词方块 II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第 483 场周赛Q2——3799. 单词方块 II

题目链接:3799. 单词方块 II(中等)

算法原理:

解法:暴力枚举 + 约束过滤

21ms击败70.07%

时间复杂度O(N⁴ log N)

①数据预处理:将所有单词存入 HashSet,快速校验单词存在性
②暴力枚举候选:通过四重嵌套循环,分别遍历作为四方块 “上、左、右、下” 四个方向的单词
③唯一性过滤:要求 top、left、right、bottom 四个单词互不相同,过滤重复组合
④字符边界约束:校验四方块的字符匹配规则(索引从 0 开始):
上边首字符 = 左边首字符(top [0] == left [0]);
上边尾字符 = 右边首字符(top [3] == right [0]);
下边首字符 = 左边尾字符(bottom [0] == left [3]);
下边尾字符 = 右边尾字符(bottom [3] == right [3])
⑤结果收集与排序:将满足约束的四单词组合存入结果列表,最后按列表内单词依次字典序排序结果

Java代码:

class Solution { public List<List<String>> wordSquares(String[] words) { //存储单词,方便快速检查存在性 Set<String> wordSet=new HashSet<>(); //手动把word数组的元素添加到Set里 for(String word:words) wordSet.add(word); List<List<String>> ret=new ArrayList<>(); //遍历所有可能的top、left、right、bottom组合 for(String top:words){ for(String left:words){ //确保top和left不同 if(top.equals(left)) continue; //检查约束:top[0]==left[0] if(top.charAt(0)!=left.charAt(0)) continue; for(String right:words){ //确保right与top、left都不同 if(top.equals(right)||right.equals(left)) continue; //检查约束:top[3]==right[0] if(top.charAt(3)!=right.charAt(0)) continue; //确定bottom需要满足的首字符和尾字符 char bottomFirst=left.charAt(3); char bottomLast=right.charAt(3); for(String bottom:words){ //确保bottom与top、left、right都不同 if(bottom.equals(top)||bottom.equals(left)||bottom.equals(right)) continue; //检查约束:bottom[0]==left[3]且bottom[3]==right[3] if(bottom.charAt(0)==bottomFirst&&bottom.charAt(3)==bottomLast){ //手动创建List并添加四个单词 List<String> q=new ArrayList<>(); q.add(top);q.add(left);q.add(right);q.add(bottom); ret.add(q); } } } } } //比较规则,在上左右下的框架下,从每组的首单词一次开始往后按字典学比较排序 Collections.sort(ret,new Comparator<List<String>>(){ @Override public int compare(List<String> a,List<String> b){ for(int i=0;i<4;i++){ int cmp=a.get(i).compareTo(b.get(i)); if(cmp!=0) return cmp; } return 0; } }); return ret; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 22:39:26

【计算机毕业设计案例】基于深度学习人工智能训练识别常见水果

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/22 4:43:21

NOTEBOOKLM vs 传统笔记:效率对比实测报告

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个NOTEBOOKLM效率分析仪表盘。功能需求&#xff1a;1) 记录并比较不同笔记方法的时间消耗&#xff1b;2) 可视化知识检索效率数据&#xff1b;3) 计算内容复用率指标&#x…

作者头像 李华
网站建设 2026/4/17 18:12:10

Node.js用dns.resolve加速DNS解析

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js中dns.resolve的深度应用&#xff1a;解锁DNS解析性能瓶颈目录Node.js中dns.resolve的深度应用&#xff1a;解锁DNS解析性…

作者头像 李华
网站建设 2026/4/16 19:44:58

零基础教程:用AI工具制作你的第一个浏览器扩展

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个适合新手的浏览器扩展教学项目&#xff0c;功能包括&#xff1a;1. 基础标签管理(新建/关闭/切换)&#xff1b;2. 简单的代理切换按钮&#xff1b;3. 清晰的中文注释&…

作者头像 李华
网站建设 2026/4/18 17:18:01

5分钟在CentOS7上搭建LNMP开发环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个一键安装脚本&#xff0c;在CentOS7上快速部署完整的LNMP&#xff08;LinuxNginxMySQLPHP&#xff09;环境&#xff0c;要求&#xff1a;1. 自动安装最新稳定版Nginx&…

作者头像 李华