【字符串】字符串查找 ( 蛮力算法 )

举报
韩曙亮 发表于 2022/01/14 00:57:25 2022/01/14
【摘要】 文章目录 一、字符串查找二、蛮力算法代码示例 一、字符串查找 算法题目链接 : https://www.lintcode.com/problem/13/ 在 一个...





一、字符串查找



算法题目链接 : https://www.lintcode.com/problem/13/

一个字符串 中查找 另外一个字符串 第一次出现的位置 ;

如 : 在 “abcdefghijk” 中查找 “def” 第一次出现的位置 , 是 4 4 4 ;


该方法使用 暴力算法 , 两层 for 循环 , 肯定可以解决 ; 如果用暴力算法 , 那面试基本就凉了 ; 暴力算法的复杂度是 O ( m × n ) O(m \times n) O(m×n) , m m m 是第一个大字符串的长度 , n n n 是被查找的字符串长度 ;

KMP 算法 是专门用于解决该问题的算法 , 该算法 只能用于解决在一个字符串中查找另外一个字符串的问题 ; KMP 算法主要靠背诵 , 没有涉及到算法的理论 , 只能用于解决单一字符串查找问题 , 一般面试时不考虑使用该算法 ; KMP 算法的算法复杂度是 O ( m + n ) O(m + n) O(m+n) ;

Rabin-Karp 算法 比 KMP 算法更简单 , 其基本原理就是比较字符串的 哈希码 ( HashCode ) , 快速的确定子字符串是否等于被查找的字符串 ;





二、蛮力算法代码示例



蛮力算法 :

需要进行双层循环遍历 ;

外层循环 遍历 source 字符串 , 遍历 source.length() - target.length() 次 ,
假设被遍历的索引 i 开始 , target.length() 位字符串 与 target 字符串是否相等 ,
如果相等 , 则该索引就是题目中想要的结果 ,
如果不相等 , 那么继续遍历下一个索引 ;

内层循环 就是遍历 target 字符串 , 逐位对比 两个字符串是否相等 ;


代码 :

class Solution {
    /**
	 * 蛮力算法 : 双层循环, 外层循环循环 source, 内层循环循环 target 对应字符是否相等
     * @param source:在该字符串中查找子字符串
     * @param target:被查找的字符串
     * @return: return the index
     */
    public int strStr(String source, String target) {
        if (target == null || "".equals(target)) {
            return 0;
        }

        for (int i = 0; i < source.length() - target.length() + 1; i++) {
            boolean notEqual = false;

            for (int j = 0; j < target.length(); j++) {
                if (source.charAt(i + j) != target.charAt(j)) {
                    // 只要有一个字符不相等, 就说明遍历的该子字符串不匹配
                    notEqual = true;
                    break;
                }
            }

            // 如果所有的字符都匹配, 即对比中没有不相等的字符, 该 i 索引就是结果
            if (!notEqual) {
                return i;
            }
        }

        return -1;
    }
}

class Main {
    public static void main(String[] args) {
        int index = new Solution().strStr("mabcban", "cb");
        System.out.println(index);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/118990449

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。