繁体   English   中英

Java | 比较char数组中的char字

[英]Java | compare char word in a char array

如何获取可在段落中找到的单个单词的索引(表示在char数组中)(再次表示在char数组中)。

char代表这个词

char word[] = new char[]{'w','o','r','d'};

这是段落

char para[] = new char[]{'f','g','q','z','y','i','o','p','w','o','r','d'};

我希望在这种情况下得到第一个字母的索引8。 我在排序单词scrambled时使用了二进制搜索。

谢谢。

理论上有点低效,但实用而简单:

int position = new String(paragraph).indexOf(new String(word));

如果你想了解它是如何工作的 - 检查java.lang.Stringstatic int indexOf(..)方法

在这种情况下,二进制搜索不会帮助您。 你必须线性搜索。 最简单的解决方案是线性搜索第一个字符,找到后检查剩下的字是否跟随。

更精细的解决方案是使用KMP算法

最简单的方法就是尝试所有可能性,循环遍历每个起始点并测试所有字符是否匹配。 事实上你已经提到了二元搜索,这可能很简单,你已经知道了,但请告诉我你是否正在寻找它。

如果您正在寻找最佳方法,请参阅http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

您可以将字符数组转换为字符串。 在字符串中搜索的结果与搜索数组时的结果相同。

String needle = new String(word);
String haystack = new String(para);
int i = haystack.indexOf(needle);

结果:

8

这可能比天真的O(n * m)搜索快得多,因为字符串函数indexOf已经过优化。

如果要在不创建临时字符串的情况下执行此操作,则可以为字节数组实现字符串搜索算法 例如,您可以选择具有最差情况O(n)的Boyer-Moore算法。

快速回答,我想其他人会更精细。 最初,我会做这样的事情(伪代码更适合思考算法):

boolean nonmatchingchar
integer i, j
for each i of word until endof word
    for each j of para until endof para
      if word i isnotequalto para i set nonmatchingchar true     
    end for
end for


if nonmatchingchar is true print "character sequence not found"

编辑:为了在你有几个要搜索的单词的情况下提高效率,你可以构成一个二维数组,其中的单词按照第一个字母排序。 从那以后,你可以逐字逐句地查看第二个数组,并根据该字母测试一个单词的子集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM