顺序查找

该算法只是简单地将给定数组中的连续元素和给定的查找键进行比较,直到遇到一个匹配的元素(成功查找),或者在遇到匹配元素前就遍历了整个列表(失败查找)。但是怎么才知道自己查找完整个列表了呢?在算法的每次循环时都检查是否到达表的末尾吗?如果我们把需要查找的K,放在A[n]的位置会怎么样?这样子的话,我们必然能够找到K,那就自然不用考虑是否到达列表末尾的问题了。但是我们怎么知道查找到的K是列表中原有的元素还是我们添加了列表末尾的?那自然是,查找结束之后,判断i的值,如果i的值等于n,则表示没找到,小于n则表示查找成功

A[n]=K有个生动形象的名字:哨兵

伪代码

SequentialSearch(A[0...n],K)//顺序查找算法实现,它用查找键累做限位器//输入:一个n个元素的数组A和一个查找键K//输出:第一个值等于K的元素的位置,如果找不到这样的元素,返回-1A[n] <- Ki <- 0while A[i] != K doi <- i + 1if i < n return ielse return -1

Java代码实现

public class SequentialSearch {public static void main(String[] args) {int[] a = new int[6];a[0] = 43; a[1]=54;a[2]=3;a[3]=6;a[4]=34;int index = -1;index = Search(a,1);if (index!=-1) System.out.println("查找成功,索引为:"+index);else System.out.println("查找失败!");index = Search(a,54);if (index!=-1) System.out.println("查找成功,索引为:"+index);else System.out.println("查找失败!");}public static int Search(int[] arr,int k){int len = arr.length;arr[len-1] = k;int i=0;while (arr[i]!=k){i++;}if (i!=len-1) return i;else return -1;}
}

结果如下:

蛮力字符串匹配

思路

字符串匹配问题:给定一个n个字符串组成的串[称为文本(text)],一个m(m ≤ \leq ≤n)个字符的串[称为模式],从文本中寻找匹配模式的子串。更准确地说,我们求的是i——文本中第一个匹配子串最左元素的下标——使得 t i = p 0 , . . . , t i + j = p j , . . . , t i + m − 1 = p m − 1 t_i=p_0,...,t_{i+j}=p_j,...,t_{i+m-1}=p_{m-1} ti​=p0​,...,ti+j​=pj​,...,ti+m−1​=pm−1​

字符串匹配问题的蛮力算法是显而易见:将模式对准文本的前m个字符,然后从左到右匹配每一对相应的字符,直到m对字符全部匹配(算法就可以停止了)或者遇到一对不匹配的字符。在后一种情况下,模式向右移一位,然后从模式的第一种字符开始,继续把模式和文本中的对应字符进行比较。

注意:在文本中,最后一轮子串匹配的起始位置为n-m(假设文本位置的下标是从0到n-1)。在这个位置之后,再也没有足够的字符可以匹配整个模式,因此也就没有必要继续匹配下去了。

伪代码

BruteForceStringMatch(T[0...n-1],P[0...m-1])//该算法实现了蛮力字符串匹配//输入://一个n个字符的数组T[0...n-1],代表一段文本//一个m个字符的数组P[0...m-1],代表一个模式//输出://如果查找成功,返回文本的第一个匹配子串中第一个字符的位置,否则返回-1for i <- 0 to n-m doj <- 0while j < m and P[j]=T[i+j] doj <- j+1if j=mreturn ireturn -1

Java代码实现

public class BruteForceStringMatch {public static void main(String[] args) {String A = "fhodsahfo";String P1 = "ods";String P2 = "os";int index = -1;index = StringMatch(A,P1);if (index!=-1) System.out.println("查找成功,索引为:"+index);else System.out.println("查找失败!");index = StringMatch(A,P2);if (index!=-1) System.out.println("查找成功,索引为:"+index);else System.out.println("查找失败!");}public static int StringMatch(String A,String P){int n = A.length();int m = P.length();for (int i=0;i<n-m+1;i++){int j=0;while (j<m&&A.charAt(i+j)==P.charAt(j)){j++;if (j == m) return i;}}return -1;}
}

结果如下:

顺序查找和蛮力字符串匹配相关推荐

  1. 蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法

    蛮力法在字符串匹配问题中的应用 字符串匹配问题通常是给定一个n个字符组成的串(称为文本),一个m(m<=n)个字符的串(称为模式),从文本中寻找匹配模式的子串.显然我们需要逐个匹配,这是蛮力算法 ...

  2. 蛮力法在查找算法中的应用(JAVA)--顺序查找

    蛮力法在查找算法中的应用 对于查找算法来说,最简单的一个思路就是逐个匹配,直到找到目标元素 顺序查找: public class Main {public static void main(Strin ...

  3. 1.9 编程基础之顺序查找 11 连续出现的字符 python

    http://noi.openjudge.cn/ch0109/11/ """ 1.9 编程基础之顺序查找 11 连续出现的字符 http://noi.openjudge. ...

  4. 字符串匹配:字符串中查找某子串

    字符串匹配:字符串中查找某子串 需求 具体算法 常规方法 程序 KMP算法 程序 后续 需求 我们在平时的软件开发,尤其是嵌入式开发,字符串匹配是非常重要的一个算法.而目前常用的字符串匹配算法有很多, ...

  5. 蛮力法 字符串匹配

    字符串匹配是数据库开发和文字处理软件的关键.幸运的是所有现代编程语言和字符串库函数,帮助我们的日常工作.不过理解他们的原理还是比较重要的. 字符串算法主要可以分为几类.字符串匹配就是其中之一.当我们提 ...

  6. 【超详细图解】字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?

    关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多.至于选择哪一种字符串匹 ...

  7. 子串查找(字符串匹配)

    子串查询 首先,我们来定义两个概念,主串和模式串.我们在字符串 A 中查找字符串 B,则 A 就是主串,B 就是模式串.我们把主串的长度记为 n,模式串长度记为 m.由于是在主串中查找模式串,因此,主 ...

  8. # 字符串从右往左查找_字符串匹配(搜索,查找)算法

    (一)前言 所谓的字符串匹配就是在一个长字符串(可称文本T)中找一个短字符串(可称模式P),看长字符串中是否存在短字符串,若存在则返回出现的第一个位置,若不存在则返回一个标记.字符串搜索算法有很多,比 ...

  9. 字符串匹配(多模式匹配篇)

    字符串匹配(多模式匹配篇) 摘要: 问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题.但怎样solve多模式串匹配问题呢? Solve:本文用简要记叙了使用trie树,tr ...

最新文章

  1. 5G NR — RAN 的技术演进方向
  2. php排字符串的高低位怎么区分,PHP-根据字符串和所用字体计算字符串所占宽高...
  3. antd如何获取表单的值_antd 父组件获取子组件中form表单的值
  4. 对python乱序字符串检查算法研究
  5. 视频编解码的理论和实践1:基础知识介绍
  6. H5项目开发分享——用Canvas合成文字
  7. jdk10 换成jdk8_JDK 10的摘要Javadoc标签
  8. docker删除es数据_木杉入门Elasticsearch(4):安装ES
  9. ntfs for mac使用注意事项有哪些?
  10. registry:NoSuchMethodError zookeeper.server.quorum.flexible.QuorumMaj
  11. 【答辩问题】计算机专业本科毕业设计答辩的一般程序
  12. 09-Python入门学习-函数基础与参数
  13. LeetCode-1.两数之和(哈希表)
  14. 关于time_wait状态的理解
  15. 世界互联网大会马云演讲实录
  16. 状态机工作流.实列.报销审批流程(二)
  17. plsql如何导入csv文件,PLSQL导入csv文件到数据库
  18. MS PROJECT 下载
  19. win10激活出现错误0xc004C003
  20. 在线SQL转XML工具

热门文章

  1. 第一台计算机的相关情况,世界上第一台计算机诞生于1945年。
  2. python分类变量相关性分析_如何在python中检查连续变量和分类变量之间的相关性?...
  3. PPT作品分享——汽车销量及新能源汽车发展研究
  4. swift5 中 selector 的正确写法
  5. mysql bitmap位图索引_Oracle位图索引(Bitmap Index)
  6. excel没有办法输入汉字和英文字母一输入就报错
  7. Redis Set操作重置过期时间问题
  8. Java—面向对象程序设计
  9. CUDA Samples
  10. php socket 编程