news 2026/4/23 18:39:39

(新卷,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/4/23 13:53:29

(新卷,100分)- 数字涂色(Java JS Python C)

(新卷,100分)- 数字涂色&#xff08;Java & JS & Python & C&#xff09;题目描述疫情过后&#xff0c;希望小学终于又重新开学了&#xff0c;三年二班开学第一天的任务是将后面的黑板报重新制作。黑板上已经写上了N个正整数&#xff0c;同学们需要给这每个数分别上…

作者头像 李华
网站建设 2026/4/23 7:52:38

小柯剧场《等你爱我》首演泪洒现场,原来是一封赴爱的情书

12月24日晚上7&#xff1a;30小柯剧场年度大戏小柯音乐剧《等你爱我》以爱为核心的治愈之旅震首演。现场观众沉浸剧情之中&#xff0c;笑与泪交织成为全场最动人的主旋律。绝境破局 魂散归安 爱留人间父母附身的身体反差感拉满&#xff1a;严肃古板的父亲附身在有你暴发户的老板…

作者头像 李华
网站建设 2026/4/23 4:50:42

大数据技术核心解析与实操实战

在数字化时代&#xff0c;数据已成为核心生产要素&#xff0c;而大数据技术正是挖掘数据价值、驱动业务决策的关键支撑。从海量异构数据的存储到分布式计算&#xff0c;从数据清洗预处理到机器学习建模&#xff0c;大数据技术形成了一套完整的技术体系&#xff0c;广泛应用于金…

作者头像 李华
网站建设 2026/4/23 16:12:11

Lupa库功能及使用场景介绍

lupa是什么库&#xff1f;在开发中遇到了这个库名&#xff0c;以及在做技术选型时听说过&#xff0c;想了解其基本功能。 需要先明确Lupa的具体定义和用途&#xff0c;然后提供足够的技术细节来判断是否符合需求。 要知道有一个完全不同的"Lupa"——这是JetBrains研…

作者头像 李华
网站建设 2026/4/23 16:17:52

如何进行 Python 和 Lua 之间的复杂数据交换

深入理解Lupa库在Python和Lua间的数据交换&#xff0c;其核心在于“双向对象代理”机制和“引用环的打破”。这不仅仅是数据复制&#xff0c;而是建立了一个动态的桥梁。 &#x1f527; 核心工作机制对象代理&#xff1a;当你在Python中将一个复杂对象&#xff08;如字典&#…

作者头像 李华