使用java完成编译在一个main方法中完成。小美在n行m列的本子上写了许多字母她会在每一行中找出一个字母来组成字符串小美想知道组成的字符串中是否存在至少一个字符串包含meituan子序列第一行输入2个整数nm;1=nm=100接下来n行每行输入一个长度为m的字符串表示小美写下的字母输出描述:若存在存在至少一个字符串包含meituan子序列则输出yes否则输出no
以下是一种可能的Java实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
char[][] board = new char[n][m];
for (int i = 0; i < n; i++) {
String line = scanner.nextLine();
for (int j = 0; j < m; j++) {
board[i][j] = line.charAt(j);
}
}
boolean found = false;
char[] target = {'m', 'e', 'i', 't', 'u', 'a', 'n'};
for (int i = 0; i < n; i++) {
if (found) {
break;
}
for (int j = 0; j < m; j++) {
if (found) {
break;
}
if (board[i][j] == 'm') {
found = checkSubsequence(board, target, i, j);
}
}
}
if (found) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
private static boolean checkSubsequence(char[][] board, char[] target, int row, int col) {
int n = board.length;
int m = board[0].length;
int targetIndex = 0;
// 检查从当前位置开始,是否存在能够组成target的子序列
while (row < n && col < m && targetIndex < target.length) {
if (board[row][col] == target[targetIndex]) {
targetIndex++;
}
row++;
col++;
}
// 若targetIndex等于target的长度,则表示找到了能够组成target的子序列
return targetIndex == target.length;
}
}
这段代码首先读取输入的n和m,然后创建一个nxm的字符矩阵来表示小美写下的字母。
接下来,通过两个嵌套的循环遍历矩阵中的每个字符,当找到一个字符为'm'时,调用checkSubsequence方法来检查从当前位置开始,是否存在能够组成"meituan"的子序列。
checkSubsequence方法从当前位置开始,沿着右下方向遍历字符矩阵,逐个比较字符是否与目标字符串中的字符相等。如果遍历完成后,目标字符串中的所有字符都能够在字符矩阵中找到对应位置的字符,那么就说明存在至少一个字符串包含"meituan"子序列。
最后,根据是否找到了满足条件的子序列,输出"yes"或"no"
原文地址: http://www.cveoy.top/t/topic/iWfQ 著作权归作者所有。请勿转载和采集!