Java 在没有任何方法的二维字符数组中搜索字符串
我的工作是为其他学生测试练习。今天我遇到了一个非常困难的问题(至少对我来说),我不确定我现在是否只是个笨蛋 我得到了一个2D字符数组和3个字符串,我必须在其中找到它们。单词可以跨越水平、垂直和对角线;向前或向后。问题是:我不允许使用任何方法,所有内容都必须在主方法内Java 在没有任何方法的二维字符数组中搜索字符串,java,arrays,loops,Java,Arrays,Loops,我的工作是为其他学生测试练习。今天我遇到了一个非常困难的问题(至少对我来说),我不确定我现在是否只是个笨蛋 我得到了一个2D字符数组和3个字符串,我必须在其中找到它们。单词可以跨越水平、垂直和对角线;向前或向后。问题是:我不允许使用任何方法,所有内容都必须在主方法内 我找不到一种没有像
我找不到一种没有像<10个循环的方法。你有什么好主意吗?我的意思是,这是显而易见的方式,当然 使用或类似的方法可以稍微加快比较速度
for row in haystack:
for character in row:
#check if pattern or reversed pattern matches
for column in haystack:
for character in column:
#check if pattern or reversed pattern matches
for positively-sloped-diagonal in haystack:
for character in diagonal:
#check
for negatively-sloped-diagonal in haystack:
for character in diagonal:
#check
根据具体的参数,执行以下操作可能会少一些脑死:
for each pattern:
for each slot in the array:
for horizontal in [-1, 0, 1]:
for vertical in [-1, 0, 1]:
if horizontal == vertical == 0:
pass
for n in range(pattern.length):
if pattern[n] != haystack[row + n * vertical][column + n * horizontal]
break
#Pattern found
#Pattern not found
您可以递归调用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;
}
if(arg[2]==array.length&&arg[3]==array.length)
返回0;
如果(调用firstTimeMainFunctionCalled){
for(int i=0;i=0&&curCol>=0&&curRow
这是一个非常粗糙的解决方案,可以做很多改进。显然,您必须通过将参数转换为字符串列表来适当地调用main方法,但它应该给您一个开始的地方。您可以使用动态编程来改进这一点,您还可以在找到字符串后回溯以对其进行处理。此外,当您查看嵌套循环不需要嵌套
请原谅我的伪代码:)不是每个要查找的字符串都有3个字符长吗?不,它们是可变的。这是向后的。我们应该教学生将单个代码块分解为方法。你的意思是说你有一个2D字符数组,你需要查找3个字符串(英语词典单词)在2D数组中,你有3个单词需要你去搜索?类似的问题在C++中实现。谢谢,不知道这个!