暴力子字符串查找

子字符串查找:给定一段长度为N的文本和一个长度为M的模式字符串,在文本中找到一个和该模式相符的子字符串

广泛使用的暴力算法,虽然在最坏情况下的运行时间与M*N成正比,但是在实际中,绝大多数比较在比较第一个字符时就会产生不匹配,它实际运行时间一般与M+N成正比

下面是暴力子字符串查找算法的Java实现:

/**
	 * 暴力字符串查找,如果找到,返回pat在txt中第一次出现的位置;没有找到则返回N的值
	 * @param txt
	 * @param pat
	 * @return
	 */
	public int strReplace(String txt, String pat) {
		int N = txt.length();
		int M = pat.length();
		for (int i = 0; i < N; i++) {
			int j;
			for (j = 0; j < M; j++) {
				if (txt.charAt(i + j) != pat.charAt(j)) {
					break;
				}
			}
			if (j == M) {
				return i;
			}
		}
		return N;
	}

暴力子字符串查找

时间: 2024-12-18 00:03:56

暴力子字符串查找的相关文章

NSString子字符串查找在父字符串的位置.

NSString上一章我们讲解了如何在父字符串中提取它的一部分作为一个新的子字符串而存在, 今天我们就来讲讲怎么知道子字符串在父字符串中的位置, 以及长度是多少. 这里使用的方法: NSRange: 前面我们说过, NSRange是作为一个结构体一样的存在, 它里面是由两个长整数类型构成的, 而rangOfString:就是把要判断的子字符串在这声明, 由它来返回给NSRange来判断子字符串所在父字符串的位置以及长度. 下面是简单例子: #import <Foundation/Foundati

子字符串查找

在终端输入多行信息,找出包含"ould"的行,并打印该行. 如: Au,love could you and I with fate conspire To grasp this sorry scheme of things entire, Would not we shatter it to bitd – and then. 在终端输出上述的文字,输出 Au,love could you and I with fate conspire Au,love could you and I

子字符串查找之————关于KMP算法你不知道的事

写在前面: (阅读本文前需要了解KMP算法的基本思路.另外,本着大道至简的思想,本文的所有例子都会做从头到尾的讲解) 作者翻阅了大量网上现有的KMP算法博客,发现广为流传的竟然是一种不完整的KMP算法.即通过next数组来作为有限状态自动机,以此实现非匹配时的回退.这不失为一种好的方法. 但我们接下来要见识的是一种更好和更完整的方法————拥有完整DFA的KMP算法 先列出本文要介绍的方法与一般方法对比下的几大优点: 在最坏情况下,对字符串的操作次数仅为一般做法的三分之二. 在所有情况下,对字符

在父字符串中查找子字符串

在父字符串中查找子字符串(指针控制,也可选择标控制) #pragma once #include<iostream> #include<assert.h> using namespace std; char* StrStr(char* source, char* dest) { assert(source&&dest); if (strlen(source) < strlen(dest)) return NULL; char* newSrc = NULL; c

[C语言】模拟实现库函数strstr,查找子字符串

//模拟实现库函数strstr,查找子字符串 #include <stdio.h> #include <assert.h> char * my_strstr( char *dst, const char * src) { assert(dst); assert(src); int i, j, k; for (i = 0; dst[i] != '\0'; i++) { for (j = i, k = 0; src[k] != '\0'&&dst[j] == src[k

字符串匹配算法一:查找子字符串

[题目] 就是给一个很长的字符串str 还有一个字符集比如{a,b,c} 找出str里包含{a,b,c}的最短子串.要求O(n). [例子] 字符集是a,b,c,字符串是abdcaabcx,则最短子串为abc. [分析] 有题意可知,满足要求的字符串只需要包括字符集中的所有字符,并没有顺序要求 当然最容易想到的是做一个字符匹配的过程,但题目要求查找次数为O(n),在思考了几种解决方法后,觉得下面的方案能够达到要求,虽然需要一些额外的空间. 下面我给出自己的解决方案,难免有遗漏的地方,如果路过的朋

KMP查找子字符串算法

举例说明: S:  ababcababa P:  ababa KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字.其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n).  在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀.  对

查找重复次数最多的子字符串

查找重复次数最多的子字符串,借鉴兆芯查找重复次数最多的字符,我们可以进行扩展,查找重复次数最多的子字符串. 基本思想是把重复次数最大记录下来,并记录起始位置: #include <iostream> #include <stdio.h> using namespace std; int mystrlen(char *str) { int sum(0); char *temp=str; while(*temp!='\0') { ++temp; ++sum; } return sum;

[Swift]扩展String类:实现find()查找子字符串在父字符串中的位置

类似于C++中的find()函数:比较等于val的范围中第一个元素的迭代器.如果没有元素匹配,则函数最后返回. 返回值是子字符串在父字符串中的位置(下标记录), 如果没有找到,那么会返回一个特别的标记npos(-1). 返回值可以看成是一个Int型的数. 1 //String扩展 2 extension String { 3 // 截取字符串:从index到结束处 4 // - Parameter index: 开始索引 5 // - Returns: 子字符串 6 func subString