假设我有以下内容:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
如何使用C在字符串中搜索dummy或dummy text?是否有任何简单的方法来做这件事,或者只对强字符串操作?我所需要的只是搜索它,并返回一个布尔值和结果。
编辑:
你们围绕这个话题进行了一次大讨论,并提出了一些算法,我不介意,因为这可能对其他人有用,甚至对将来的我也有用。但我真正想要的是最简单的方法,不管时间和空间的复杂性。这对我做什么并不重要。因此,strstr轻松而迅速地解决了我的问题。我真的得给我买一些标准的C函数切
我希望在一个字符串中搜索另一个较短的字符串,该字符串可能包含与零个或多个字符匹配的通配符*。例如,如果主字符串是“正在搜索此字符串中的子字符串”,并且搜索字符串是" is *ing“,则应该在"is string”处返回匹配。用于这种搜索的算法是什么?现有的大多数算法都执行全局匹配或模式匹配,但它们不执行子字符串搜索。
我试图使用Aho-Corasick和单维KMP的组合来解决二维搜索问题,但是,我仍然需要更快的东西。
为了详细说明,我有一个大小为n1*n2的字符矩阵A,我希望找到大小为m1*m2的较小矩阵B的所有匹配项,如果可能,我希望它的大小为O(n1*n2+m1*m2)。
例如:
A = a b c b c b
b c a c a c
d a b a b a
q a s d q a
和
B = b c b
c a c
a b a
该算法应该返回匹配的左上角的索引,在这种情况下应该返回(0,1)和(0,3)。请注意,这些引用可能会重叠。
查看KMP算法,并对KMP中计算后缀-前缀计数表的特定行感到困惑。
算法kmp_table:输入:字符数组,W(要分析的单词)整数数组,T(要填充的表)输出:无(但在操作期间,它会填充表)
define variables:
an integer, pos ← 2 (the current position we are computing in T)
an integer, cnd ← 0 (the zero-based index in W of the next
character of the current candidate substring)
(th
假设我有一个较大的byte[],我不仅要查看较小的byte[]是否在较大的数组中,而且还要查看在较大的数组中的位置。例如:
byte[] large = new byte[100];
for (byte i = 0; i < 100; i++) {
large[i] = i;
}
byte[] small = new byte[] { 23, 24, 25 };
int loc = large.IndexOf(small); // this is what I want to write
我想我问的是在一个更大的序列中寻找任何类型的序列(原语或其他类型)。
我隐约记得在字符串中
我已经实现了Knuth-Morris-Pratt算法来搜索字符串B中的字符串A。如果它找到字符串,如果返回字符串的第一个位置,则返回-1。但现在我想计算字符串A在字符串B中的总出现次数。
我已经尝试了一种简单的方法,它是有效的,但这似乎不是很有效,因为它需要大量的时间来处理大字符串。
有人能帮我解决这个问题吗?我想要一种使用KMP的更有效的方式。
这是我的测试。
public static int searchStringWithKnuthMorrisPratt(String s, String t)
{
int m=s.length();
int n=t.length
我使用以下字母表生成了一个字符串。{A,C,G,T}。我的字符串包含10000多个字符。我正在搜索下面的模式。
ATGGA
TGGAC
CCGT
我要求使用具有O(m+n)运行时间的字符串匹配算法。
m = pattern length
n = text length
两个KMP and Rabin-Karp algorithms都有这个运行时间。在这种情况下,最合适的算法是什么(Rabin和KMP之间)?
我已经看到了这个算法的几个实现,例如具有2个计数器和前缀迭代的实现,或者使用递归的实现。然而,我很难理解使用动态编程的方法。
由于我的知识肤浅,这是我设法想出的:
def sufperf(S):
Pi = [0 for i in range(len(S))]
for i in range(1, len(S)):
p = Pi[i - 1]
while p > 0 and S[i] != S[p]:
p = Pi[p-1]
if S[i] == S[p]:
p += 1
我正在尝试使用搜索算法KMP来计算模式出现的数量和所需的比较(在下面的代码中称为匹配)。
我试过以下几点:
public class KMP {
private String pat;
private int[][] dfa;
private static int match;
private static int count;
public KMP(String pat) {
// Build DFA from pattern.
this.pat = pat;
int M = pat.le
例如,我有句话:
This is a trash bag.
,它存储在一个列表中,其中每个元素都是一个单词:
List<String> wrodList = new ArrayList<String>;
我有另一本字典,用来存储单词-freq对:
Map<String, Integer> allWords = new HashMap<String, Integer>();
有几个例子:
bag 300
trash 250
trash bag 100
big trash bag 50
现在我想通过wordList
["thi