以下是一种可能的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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录