暴力算法

主要特征
1、没有预处理阶段
2、需要常量额外空间
3、通常需要模式串窗口向右移动一个位置
4、可以按照任意顺序进行比较
5、搜索的时间复杂度为O(mn)
6、文本字符期望比较次数:2n

暴力搜索算法由文本串中从0到n-m所有位置的比较组成,无论是否从模式串的起始位置开始,每次匹配过后,模式串向右移动一位。
暴力搜索算法没有预处理阶段,文本串和模式串需要常量额外空间,在搜索阶段的文本串的字符可以按照任意顺序进行比较,匹配的时间复杂度为O(mn)

Java代码实现:

  1. /**
  2. *暴力匹配 算法
  3. * @param str 要进行匹配的字符串
  4. * @param partten 匹配模式
  5. * @return
  6. 首个匹配到的字母的位置
  7. */
  8. public static int violentMatch(String
  9. str,String partten){
  10. int i = 0;
  11. //可以理解为str的指针
  12. int j = 0;
  13. // Partten的指针
  14. while (i<str.length() &&
  15. j<partten.length()){
  16. if(str.charAt(i)==partten.charAt(j)){ //匹配到了字符串
  17. i++;
  18. j++;
  19. }else {
  20. //匹配失败,i回退到刚刚开始匹配的下一个元素,j重置
  21. i = i-j+1;
  22. j = 0;
  23. }
  24. } //end while
  25. 两种情况:i>=str.length(),没有匹配到;j>=partten.length() 匹配到了
  26. if(j==partten.length()){
  27. return i-j;
  28. }else {
  29. return -1;
  30. }
  31. }

KMP算法 TODO