【问题标题】:Trying to search a grid of characters in java for a specific word. How can I search from right to left after searching from left to right?尝试在 java 中的字符网格中搜索特定单词。从左到右搜索后如何从右到左搜索?
【发布时间】:2014-10-07 23:20:55
【问题描述】:

我有以下代码从左到右搜索下面的字符网格以查找单词。这非常有效。

// Left to Right
public static String findLeftToRight (char[][]board, String word) {
char[] letters = word.toCharArray();

for (int i = 0; i < board.length; i++){
    for (int j = 0; j < board[i].length; j++) {
        boolean found = true;

        for (int k = 0; k < letters.length; k++) {
            if ((j+k >= board[i].length) || (letters[k] != board[i][j+k])) {
                found = false;
                break;
            }
        }

        if (found) {
            return "String " + word + " found in row=" + i + " col=" +j;
        }
     }
  } 
  return "String " + word + " not found";
} // end findLeftToRight

但是,我不知道如何从右到左搜索。下面是我从右到左搜索的尝试,但它不起作用。谁能告诉我我做错了什么?

// Right to Left
public static String findRightToLeft (char[][]board, String word) {
    char[] letters = word.toCharArray();

for (int i = board.length-1; i > -1; i--){
    for (int j = board[i].length-1; j > -1; j--) {
        boolean found = true;

        for (int k = 0; k < letters.length; k++) {
            if ((j+k <= board[i].length) || (letters[k] != board[i][j+k])) {
                found = false;
                break;
            }
        }

        if (found) {
            return "String " + word + " found in row=" + i + " col=" +j;
          }
        }
    }
    return "String " + word + " not found";
} // end findLeftToRight

【问题讨论】:

  • 我认为更简单的方法是调用原始方法并将字符串反转。 new StringBuilder(x).reverse().toString() 应该可以带你到那里。

标签: java search multidimensional-array


【解决方案1】:

if ((j+k <= board[i].length) || (letters[k] != board[i][j+k])) {

也需要反转:

if ((j - k < 0) || (letters[k] != board[i][j-k])) {

【讨论】:

  • 你能解释一下为什么它被颠倒了/它做了什么吗?谢谢。
  • 您的单词始终是字母[],顺序为 0-x。当您从右到左搜索时,(如您所知)第二个字母在第一个字母的左侧,这意味着 board[row][secondletter] 与 board[row][firstletter] 相比是相反的。 secondletter 必须是
  • 您也可以反转检查字母,因此您正在检查 board[row][0] == (最后一个字母索引)并在向右移动时减小字母索引。这将达到相同的结果。
猜你喜欢
  • 2022-10-30
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2011-01-28
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多