优化单词搜索要求所需的建议

时间:2015-07-20 17:20:46

标签: java algorithm performance

我编写了单词搜索问题的代码,我们需要搜索并获取N * N网格中特定单词的出现次数。我需要一些建议来改进此代码,以获得更好的性能。

可以在两个方向上水平,垂直和对角搜索单词

代码是:

TypeError: Object.keys called on non-object

我想减少循环次数。除此之外,有人可以建议我如何处理重叠场景。例如,在5 * 5中,第一行值为Scanner sc = new Scanner(System.in); String size = sc.nextLine(); String finalArr[][] = new String[Integer.parseInt(size)][Integer.parseInt(size)]; int count = 0; String diagonal1 = "", diagonal2 = ""; String arr[] = sc.nextLine().split(","); // initializing array for (int i = 0; i < arr.length; i++ ) { String b[]= arr[i].split("#"); for (int j = 0; j < arr.length; j++) { finalArr[i][j] = b[j]; } } StringBuilder searchWord = new StringBuilder(sc.nextLine()); // Loop for horizontal and vertical count for (int i = 0; i < finalArr.length; i++) { String horizontal = ""; String vertical = ""; for (int j = 0; j < finalArr.length; j++) { horizontal += finalArr[i][j]; vertical += finalArr[j][i]; } if ( horizontal.contains(searchWord) || horizontal.contains(searchWord.reverse() ) ) count++; if ( vertical.contains(searchWord) || vertical.contains(searchWord.reverse() ) ) count++; } //loop for one diagonal count for (int i = 0; i < finalArr.length; i++ ) { diagonal1 += finalArr[i][i]; } //loop for another diagonal count for ( int i = 0, j = finalArr[i].length - 1; i < finalArr.length; i++, j--) { diagonal2+= finalArr[i][j]; } if ( diagonal1.contains(searchWord) || diagonal1.contains(searchWord.reverse() ) ) count++; if ( diagonal2.contains(searchWord) || diagonal2.contains(searchWord.reverse() ) ) count++; System.out.println(count); sc.close(); ,而要搜索的单词为ASKSA。在这种情况下,ASK是重叠的字符。

1 个答案:

答案 0 :(得分:0)

您的代码在某些方面有点难以阅读(通用/非描述变量名称,没有评论),但我看到了一些需要改进的地方。请注意,有时编写清晰的代码而不是优化性能更为重要。

首先,我不认为您的代码适用于所有情况。例如,如果字符串ASKASK出现在一行中,则当有ASK个时,计数会加1。

其次,你可以为像RACECAR这样的回文添加优化,其反面是同一个词。

正如目前所写,你可以摆脱的唯一循环是对角循环。您需要添加int j = finalArr[i]-1-i;,以便可以在

下方移动它们
// Loop for horizontal and vertical count
for (int i = 0; i < finalArr.length; i++) {

话虽这么说,你可以稍微重写代码以提高效率。例如,在10x10拼图中,如果单词EFFICIENT在一行中,则字母E将是第一个或第二个字符。 (您还知道T将是包含EFFICIENT反向的行中的第一个或第二个字符。)