任务: 我有两个字符数组的字符满填充随机值[a-z],需要查找是否有单词" ala" vertilac \ horizontal \ diagonal在这个数组中的任何地方。
我做了什么: 在我的程序中,我会浏览所有角色并尝试在所有维度中找到单词。
我想要的: 我觉得有更多的智能方式来完成这项任务将会:
这是我目前的代码:
Random randomGenerator = new Random();
char[][] arr = new char[50][50];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = (char) (randomGenerator.nextInt(26)+97);
}
}
System.out.println();
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
boolean ala = false;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (j>1) {
if (arr[i][j] == 'a' && arr[i][j - 1] == 'l' && arr[i][j - 2] == 'a') {//left
ala = true;
System.out.println(i + " " + j);
}
}
if (j<arr[i].length-2) {
if (arr[i][j] == 'a' && arr[i][j + 1] == 'l' && arr[i][j + 2] == 'a') {//rigth
ala = true;
System.out.println(i + " " + j);
}
}
if (i<arr.length-2) {
if (arr[i][j] == 'a' && arr[i + 1][j] == 'l' && arr[i + 2][j] == 'a') {//bot
ala = true;
System.out.println(i + " " + j);
}
}
if (i>1) {
if (arr[i][j] == 'a' && arr[i-1][j] == 'l' && arr[i - 2][j] == 'a') {//top
ala = true;
System.out.println(i + " " + j);
}
}
if (i<arr.length-2 && j<arr[i].length-2) {
if (arr[i][j] == 'a' && arr[i + 1][j + 1] == 'l' && arr[i + 2][j + 2] == 'a') {//bot&rigth
ala = true;
System.out.println(i + " " + j);
}
}
if (i>1 && j>1) {
if (arr[i][j] == 'a' && arr[i - 1][j - 1] == 'l' && arr[i - 2][j - 2] == 'a') {//top&left
ala = true;
System.out.println(i + " " + j);
}
}
if (i>1 && j<arr[i].length-2) {
if (arr[i][j] == 'a' && arr[i - 1][j + 1] == 'l' && arr[i - 2][j + 2] == 'a') {//top&rigth
ala = true;
System.out.println(i + " " + j);
}
}
if (i<arr.length-2 && j>1) {
if (arr[i][j] == 'a' && arr[i + 1][j - 1] == 'l' && arr[i + 2][j - 2] == 'a') {//bot&left
ala = true;
System.out.println(i + " " + j);
}
}
}
}
System.out.println(ala);
答案 0 :(得分:0)
优化代码的一种方法是使用更快的substring search algorithm。我担心你不得不重新实现这些,因为你没有将数据存储在任何常见的数据结构中,而是使用自定义数组访问。请注意,这不会使您的代码更简单,即使您可以通过重构使其看起来更好。
为了使代码更简单,您可以将数据存储在表示行,列和对角线的字符串中,这样您就可以使用String.contains
/ String.indexOf
或前面提到的任何复杂算法。注意,数据占用空间将大于数组。