java遍历二维字符数组_java-在二维字符数组上查找单词

有趣的问题.我将首先通过水平,垂直和对角线(双向)遍历拼图来构建“可能的单词持有者”列表(可能包含给定单词中的一个字符的序列)来解决此问题.然后,我将查看在每个获得的“可能的单词持有者”中是否存在给定的单词(或它们的反向符号)(使用Java中的contains()方法).这是我用Java写的代码.我没有对其进行正确的测试,但是我想它可以工作!

import java.util.HashSet;

import java.util.LinkedHashSet;

import java.util.Set;

public class WordPuzzle {

public Set findWords(char[][] puzzle, Set words) {

Set foundWords = new HashSet();

int minimumWordLength = findMinimumWordLength(words);

Set possibleWords = findPossibleWords(puzzle, minimumWordLength);

for(String word : words) {

for(String possibleWord : possibleWords) {

if(possibleWord.contains(word) || possibleWord.contains(new StringBuffer(word).reverse())) {

foundWords.add(word);

break;

}

}

}

return foundWords;

}

private int findMinimumWordLength(Set words) {

int minimumLength = Integer.MAX_VALUE;

for(String word : words) {

if(word.length() < minimumLength)

minimumLength = word.length();

}

return minimumLength;

}

private Set findPossibleWords(char[][] puzzle, int minimumWordLength) {

Set possibleWords = new LinkedHashSet();

int dimension = puzzle.length; //Assuming puzzle is square

if(dimension >= minimumWordLength) {

/* Every row in the puzzle is added as a possible word holder */

for(int i = 0; i < dimension; i++) {

if(puzzle[i].length >= minimumWordLength) {

possibleWords.add(new String(puzzle[i]));

}

}

/* Every column in the puzzle is added as a possible word holder */

for(int i = 0; i < dimension; i++) {

StringBuffer temp = new StringBuffer();

for(int j = 0; j < dimension; j++) {

temp = temp.append(puzzle[j][i]);

}

possibleWords.add(new String(temp));

}

/* Adding principle diagonal word holders */

StringBuffer temp1 = new StringBuffer();

StringBuffer temp2 = new StringBuffer();

for(int i = 0; i < dimension; i++) {

temp1 = temp1.append(puzzle[i][i]);

temp2 = temp2.append(puzzle[i][dimension - i - 1]);

}

possibleWords.add(new String(temp1));

possibleWords.add(new String(temp2));

/* Adding non-principle diagonal word holders */

for(int i = 1; i < dimension - minimumWordLength; i++) {

temp1 = new StringBuffer();

temp2 = new StringBuffer();

StringBuffer temp3 = new StringBuffer();

StringBuffer temp4 = new StringBuffer();

for(int j = i, k = 0; j < dimension && k < dimension; j++, k++) {

temp1 = temp1.append(puzzle[j][k]);

temp2 = temp2.append(puzzle[k][j]);

temp3 = temp3.append(puzzle[dimension - j - 1][k]);

temp4 = temp4.append(puzzle[dimension - k - 1][j]);

}

possibleWords.add(new String(temp1));

possibleWords.add(new String(temp2));

possibleWords.add(new String(temp3));

possibleWords.add(new String(temp4));

}

}

return possibleWords;

}

public static void main(String args[]) {

WordPuzzle program = new WordPuzzle();

char[][] puzzle = {

{'F','Y','Y','H','N','R','D'},

{'R','L','J','C','I','N','U'},

{'A','A','W','A','A','H','R'},

{'N','T','K','L','P','N','E'},

{'C','I','L','F','S','A','P'},

{'E','O','G','O','T','P','N'},

{'H','P','O','L','A','N','D'}

};

Set words = new HashSet();

words.add("FRANCE");

words.add("POLAND");

words.add("INDIA");

words.add("JAPAN");

words.add("USA");

words.add("HOLLAND");

Set wordsFound = program.findWords(puzzle, words);

for(String word : wordsFound) {

System.out.println(word);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值