あなたは再帰的に前方、後方、アップ、ダウン検索するmainメソッドを呼び出すことができ、左上/下斜め、右上/下斜めに表示されます。
if (arg[2] == array.length && arg[3] == array.length)
return 0;
if (firstTimeMainFunctionCalled) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
// Only make recursive call when you are
// on the outer edge of the 2D array
if (i == 0 || j == 0) {
main(1, 0, i, j);
main(0, 1, i, j);
main(1, 1, i, j);
main(-1, 0, i, j);
main(0, -1, i, j);
main(-1, -1, i, j);
main(1, -1, i, j);
main(-1, 1, i, j);
}
}
}
int rowInc = arg[0];
int colInc = arg[1];
int curRow = arg[2];
int curCol = arg[3];
int str1Place = 0;
int str2Place = 0;
int str3Place = 0;
while (curRow >= 0 && curCol >= 0 && curRow < array.length && curCol < array[0].length) {
if (array[curRow][curCol] == str1[str1Place])
str1Place++;
else
str1Place = 0;
if (str1Place == str1.length)
// Found str1
// Do the same for str2 and str3
curRow += rowInc;
curCol += colInc;
}
これは非常に粗溶液で、全体の多くを向上させることができ、あなたは明らかに文字列のリストに引数を回すことによって、適切にmainメソッドを呼び出す必要がありますが、それは起動にどこかを与える必要があります。あなたは動的プログラミングを使用してこれを改善することができます、あなたはまた、一度それを見つけると文字列で何かをするためにバックトラックすることができます。また、ネストしたループをネストする必要はありません。
私の擬似コード:
見つかる各文字列は3文字長いようなことはありませんか? –
いいえ、変数は –
です。これは後方です。モノリシックなコードブロックをメソッドに分割するように学生に教えるべきです。 –