字母阵列
仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:“LANQIAO”。
SLANQIAO
ZOEXCCGB
MOAYWKHI
BCCIPLJQ
SLANQIAO
RSFWFNYA
XIFZVWAL
COAIQNAL
我们约定: 序列可以水平,垂直,或者是斜向;
并且走向不限(实际上就是有一共8种方向)。
上图中一共有4个满足要求的串。
下面有一个更大的(100x100)的字母方阵。
你能算出其中隐藏了多少个“LANQIAO”吗?
package the_blue_cup;
import java.util.Arrays;
import java.util.Scanner;
//字母阵列
public class Demo_08 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] characterStrings = new String[100];
char[][] character = new char[characterStrings.length][characterStrings.length];
//插入数据
Scanner sc = new Scanner(System.in);
for (int i = 0; i < characterStrings.length; i++) {
characterStrings[i] = sc.nextLine();
character[i] = characterStrings[i].toCharArray();
}
for (int i = 0; i < character.length; i++) {
System.out.println(Arrays.toString(character[i]));
}
//筛选出满足情况的元素
int sum = 0;
for (int i = 0; i < character.length; i++) {
for (int j = 0; j < character[i].length; j++) {
if (character[i][j] == 'L') {
sum += check(i, j, character);
}
}
}
System.out.println(sum);
}
//该方法负责检索字符串
public static int check(int row, int col, char[][] array) {
boolean flag = true;
char[] ref = {'A', 'N', 'Q', 'I', 'A', 'O'};
int sum = 0;
//检索行
//检索从右到左
if (col - 6 >= 0) {
for (int i = col - 1, j = 0; i >= col - 6 && j < 6; i--, j++) {
if (array[row][i] != ref[j]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum++;
}
//检索从左到右
//重置标记
flag = true;
if (col + 6 <= array[row].length - 1) {
for (int i = col + 1, j = 0; i <= col + 6 && j < 6; i++, j++) {
if (ref[j] != array[row][i]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum += 1;
}
//检索从上到下
//重置标记
flag = true;
if (row + 6 <= array[row].length - 1) {
for (int i = row + 1, j = 0; i <= row + 6 && j < 6; i++, j++) {
if (ref[j] != array[i][col]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum += 1;
}
//检查从下到上
//重置标记
flag = true;
if (row - 6 >= 0) {
for (int i = row - 1, j = 0; i >= row - 6 && j < 6; i--, j++) {
if (array[i][col] != ref[j]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum++;
}
//检查从左上到右下
flag = true;
if (row + 6 <= array.length - 1 && col + 6 <= array[row].length - 1) {
for (int i = row + 1, j = col + 1, k = 0; i <= row + 6 && j <= col + 6; i++, j++, k++) {
if (ref[k] != array[i][j]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum += 1;
}
//检查从右下到左上
flag = true;
if (row - 6 >= 0 && col - 6 >= 0) {
for (int i = row - 1, j = col - 1, k = 0; i >= row - 6 && j >= col - 6; i--, j--, k++) {
if (ref[k] != array[i][j]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum += 1;
}
//检查从左下到右上
flag = true;
if (row - 6 >= 0 && col + 6 <= array[col].length - 1) {
for (int i = row - 1, j = col + 1, k = 0; i >= row - 6 && j <= col + 6; i--, j++, k++) {
if (ref[k] != array[i][j]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum += 1;
}
//检查从右上到左下
flag = true;
if (row + 6 <= array.length - 1 && col - 6 >= 0) {
for (int i = row + 1, j = col - 1, k = 0; i <= row + 6 && j >= col - 6; i++, j--, k++) {
if (ref[k] != array[i][j]) {
flag = false;
}
}
}else {
flag = false;
}
if (flag) {
sum += 1;
}
return sum;
}
}
输出结果:
41