我有一个只有+'和空格的文本文件。我必须在这个文件中找到一个看起来像宇宙飞船的目标。但宇宙飞船并不一定非常完美。
提前致谢
这是带有目标的文本文件,较小的版本。这里至少有一个目标。
+ ++ + + + + + + + +++ +
+ ++ + + ++ + + ++ ++ + +
+ + + + ++ + + ++++ ++
+ + ++++ + ++ + ++ +
+ + + + ++ + ++ + +
+ + + + ++ + + + +
+ + ++ + + +++ ++ +++
+ + + + ++ + ++ ++ + ++
+ + + + + ++ + + + + ++ + +
+ ++ + + ++ ++ +++ +
+ ++ + ++ + + + + ++ ++ +
+ + ++ ++ + + + + +
+ + + + + ++ + +
这是目标
+
+
+++
+++++++
++ ++
++ + ++
++ +++ ++
++ + ++
++ ++
+++++++
+++
我试过Regex模式阅读,但文件太大,所以我决定反对。我不知道有任何其他方法可以解决这个问题。
答案 0 :(得分:0)
我认为你不能或者不需要做任何真正喜欢的事情。
您可以从编码模式开始。在这种情况下,您可以:
String[]
List<String>
char[][]
Number 3的好处是您可以轻松地将其索引为矩阵:
char[][] matrix = ...;
char ch = matrix[row][column];
所以你有:
char[][] search = new char[searchRows][searchColumns];
char[][] target = new char[targetRows][targetColumns];
你的算法可能是:
第1步:
最大行或列是搜索模式中的行或列总数减去目标模式中的行或列。
int maxMatch = 0;
int maxMatchRow = -1;
int maxMatchColumn = -1;
for (int row = 0; row <= searchRows - targetRows; row++) {
for (int column = 0; columns <= searchColumns - targetColumns; column++) {
int match = calculateMatch(search, target, row, column);
if (match > maxMatch) {
maxMatchRow = row;
maxMatchColumn = column;
}
}
}
要计算方法calculateMatch
中的匹配项,只需添加一个search
和target
中的字符相同(但添加偏移row
和{{1}当您检查column
时,而不是当您选中search
)
我认为你应该能够从那里完成它。