news 2026/5/1 7:58:15

(新卷,200分)- 找单词(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,200分)- 找单词(Java JS Python)

(新卷,200分)- 找单词(Java & JS & Python)

题目描述

给一个字符串和一个二维字符数组,如果该字符串存在于该数组中,则按字符串的字符顺序输出字符串每个字符所在单元格的位置下标字符串,如果找不到返回字符串“N”。

1.需要按照字符串的字符组成顺序搜索,且搜索到的位置必须是相邻单元格,其中“相邻单元格”是指那些水平相邻或垂直相邻的单元格。

2.同一个单元格内的字母不允许被重复使用。

3.假定在数组中最多只存在一个可能的匹配。

输入描述

第1行为一个数字N指示二维数组在后续输入所占的行数。

第2行到第N+1行输入为一个二维大写字符数组,每行字符用半角,分割。

第N+2行为待查找的字符串,由大写字符组成。

二维数组的大小为N*N,0<N<=100。

单词长度K,0<K<1000。

输出描述

输出一个位置下标字符串,拼接格式为:第1个字符行下标+”,”+第1个字符列下标+”,”+第2个字符行下标+”,”+第2个字符列下标… +”,”+第N个字符行下标+”,”+第N个字符列下标。

用例
输入4
A,C,C,F
C,D,E,D
B,E,S,S
F,E,C,A
ACCESS
输出0,0,0,1,0,2,1,2,2,2,2,3
说明ACCESS分别对应二维数组的[0,0] [0,1] [0,2] [1,2] [2,2] [2,3]下标位置。
题目解析

题目假定在数组中最多只存在一个可能的匹配。因此我们只要找到即返回。

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const path = require("path"); const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; let n; rl.on("line", (line) => { lines.push(line); if (lines.length === 1) { n = parseInt(lines[0]); } if (n && lines.length === n + 2) { lines.shift(); const str = lines.pop(); const grid = lines.map((line) => line.split(",")); console.log(findLetter(grid, n, str)); lines.length = 0; } }); function findLetter(grid, n, str) { function dfs(i, j, k, path) { if (i < 0 || i >= n || j < 0 || j >= n || grid[i][j] !== str[k]) return false; path.push([i, j]); if (path.length === str.length) return true; const tmp = grid[i][j]; grid[i][j] = undefined; const res = dfs(i - 1, j, k + 1, path) || dfs(i + 1, j, k + 1, path) || dfs(i, j - 1, k + 1, path) || dfs(i, j + 1, k + 1, path); if (!res) { grid[i][j] = tmp; path.pop(); } return res; } for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { const path = []; if (dfs(i, j, 0, path)) { return path.toString(); } } } return "N"; }
Java算法源码
import java.util.LinkedList; import java.util.Scanner; import java.util.StringJoiner; public class Main { static int n; static String[][] matrix; static String tar; public static void main(String[] args) { // 将输入分隔符改为“,”和换行 Scanner sc = new Scanner(System.in).useDelimiter("[,\n]"); n = sc.nextInt(); matrix = new String[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = sc.next(); } } tar = sc.next(); System.out.println(getResult()); } public static String getResult() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { LinkedList<Integer[]> path = new LinkedList<>(); if (dfs(i, j, 0, path)) { StringJoiner sj = new StringJoiner(","); for (Integer[] pos : path) sj.add(pos[0] + "," + pos[1]); return sj.toString(); } } } return "N"; } public static boolean dfs(int i, int j, int k, LinkedList<Integer[]> path) { if (i < 0 || i >= n || j < 0 || j >= n || !tar.substring(k, k + 1).equals(matrix[i][j])) { return false; } path.add(new Integer[] {i, j}); if (path.size() == tar.length()) return true; String tmp = matrix[i][j]; matrix[i][j] = null; boolean res = dfs(i - 1, j, k + 1, path) || dfs(i + 1, j, k + 1, path) || dfs(i, j - 1, k + 1, path) || dfs(i, j + 1, k + 1, path); if (!res) { matrix[i][j] = tmp; path.removeLast(); } return res; } }
Python算法源码
# 输入获取 n = int(input()) matrix = [input().split(",") for _ in range(n)] tar = input() def dfs(i, j, k, path): if i < 0 or i >= n or j < 0 or j >= n or matrix[i][j] != tar[k]: return False path.append([i, j]) if len(path) == len(tar): return True tmp = matrix[i][j] matrix[i][j] = "" res = dfs(i - 1, j, k + 1, path) or dfs(i + 1, j, k + 1, path) or dfs(i, j - 1, k + 1, path) or dfs(i, j + 1, k + 1, path) if not res: matrix[i][j] = tmp path.pop() return res # 算法入口 def getReuslt(): for i in range(n): for j in range(n): path = [] if dfs(i, j, 0, path): return ",".join(map(lambda x: ",".join(map(str, x)), path)) return "N" # 算法调用 print(getReuslt())
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:52:09

企业管理的核心:协同、数据与持续优化

在当今快速变化的商业环境中&#xff0c;企业管理的核心究竟是什么&#xff1f;是严格的制度&#xff0c;先进的科技&#xff0c;还是优秀的团队&#xff1f;事实上&#xff0c;现代企业管理已演变为一个多维度的系统工程&#xff0c;其核心可以概括为流程协同化、数据驱动决策…

作者头像 李华
网站建设 2026/5/1 5:25:45

基于SpringBoot框架开发的景区民宿预约系统(毕设源码+文档)

课题说明本课题聚焦景区民宿住宿的便捷化预约与规范化管理需求&#xff0c;针对当前景区民宿信息分散、预约流程繁琐、房态信息不透明、订单管理效率偏低等痛点&#xff0c;设计开发基于SpringBoot框架的景区民宿预约系统。系统以SpringBoot为核心后端框架&#xff0c;结合前端…

作者头像 李华
网站建设 2026/5/1 5:26:10

阿里二面:如何保证 Redis 和 MySQL 的数据一致性?还在背“延时双删”的Sleep玄学?教你高性能 + 高可靠的方案

写在开头&#xff1a; 我在公众号发了一篇《先更新数据库还是先删除缓存&#xff1f;》的文章&#xff0c;里面和大家聊到了 binlog 兜底方案的实现思路。 文章发出后&#xff0c;有细心的小伙伴后台私信我&#xff0c;指出方案里漏掉了先删除缓存这个关键操作。 这个反馈非常精…

作者头像 李华
网站建设 2026/5/1 4:56:33

【Hadoop+Spark+python毕设】全球各地旅游体验评价数据分析系统、计算机毕业设计、包括数据爬取、数据分析、数据可视化、实战教学

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

作者头像 李华
网站建设 2026/5/1 5:27:02

详细分析线程池上下文的基本知识(附Demo)

目录前言1. 基本知识2. 父子线程数据不同3. 父子线程数据相同前言 Java基本知识&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 本意大概…

作者头像 李华
网站建设 2026/5/1 5:26:40

16、深入探索 XML:从基础概念到 SQL Server 实践

深入探索 XML:从基础概念到 SQL Server 实践 1. XML 基础概念 XML,即可扩展标记语言,是一种元语言,用于定义其他语言,这些被定义的语言被称为标记语言。XML 文档是通过标记数据创建的,即将数据封装在开始标签和结束标签之间。这些标签定义的元素形成层次结构,使 XML 文…

作者头像 李华