news 2026/1/13 12:49: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/1/8 7:08:39

一篇看懂JWT:Web安全的“身份证”

诸神缄默不语-个人技术博文与视频目录 文章目录 什么是JWT&#xff1f;一个简单的比喻为什么需要JWT&#xff1f;JWT长什么样&#xff1f;1. 头部&#xff08;Header&#xff09;2. 载荷&#xff08;Payload&#xff09;3. 签名&#xff08;Signature&#xff09; 用Python玩转…

作者头像 李华
网站建设 2025/12/25 21:27:31

基于微信小程序的直播带货商品数据分析系统毕设源码+文档+讲解视频

前言 本课题聚焦直播带货行业的数据化运营需求&#xff0c;针对当前直播商品数据分散、分析维度单一、运营决策缺乏精准数据支撑等痛点&#xff0c;设计开发基于微信小程序的直播带货商品数据分析系统。系统以微信小程序为核心载体&#xff0c;结合前端原生开发技术与后端数据处…

作者头像 李华
网站建设 2025/12/30 8:39:33

基于 S7 - 1200 和博图 15.1 的三层立体车库 PLC 设计

三层立体车库plc s7-1200 博图15.1 1、设置启动、停止按钮&#xff0c;且设置指示灯显示车库的开关状态&#xff1b; 2、7个车位的车俩可以自由存取&#xff0c;且车库可以实现自动存取&#xff08;存取选择最优路径&#xff09;&#xff1b; 3、每个车位均有电机控制&#…

作者头像 李华
网站建设 2025/12/25 21:23:47

当图像开始跳舞:用Matlab玩转频率域滤镜

标题&#xff1a;基于matlab的理想滤波器和巴特沃斯滤波器设计 关键词&#xff1a;一阶巴特沃斯滤波器 理想滤波器 二维傅里叶变换 fft2 描述&#xff1a;对任意图像进行灰度化&#xff0c;然后进行二维傅里叶变化&#xff0c;设定一个阈值&#xff0c;对高频或者低频信号进行滤…

作者头像 李华
网站建设 2025/12/25 21:18:53

Java面试必看:ConcurrentHashMap并发度解析

文章目录Java面试必看&#xff1a;ConcurrentHashMap并发度解析&#xff1f;场景还原&#xff1a;面试官与我的对话什么是并发度&#xff1f;并发度的核心思想并发度的实现细节1. Segment数组2. 分段锁机制3. 动态调整Segment数量4. 高效的查找机制如何配置合适的并发度&#x…

作者头像 李华
网站建设 2026/1/8 3:03:24

计算机基础小题

第一章 填空题 基于&#xff08;存储程序&#xff09;原理的冯诺依曼计算机&#xff0c;其工作方式的基本特点是&#xff08;按地址访问并顺序执行指令&#xff09;&#xff08;指令&#xff09;和&#xff08;数据&#xff09;都存放在存储器中&#xff0c;&#xff08;控制器…

作者头像 李华