文章目录

  • 一、字符串查找
  • 二、蛮力算法代码示例

一、字符串查找


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

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

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

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

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. java对字符串快查找_字符串快速查找 - Trie算法

    Trie算法 先对给定的字符串进行归集,形成一个多叉树形结构. 使用字符导航方式作匹配查找. trie算法有很多变种,以最左(前缀)匹配为例进行说明. 优点 使用字符导航查找方式,能最大限度减少字符比 ...

  2. Rabin-Karp 算法(字符串快速查找)

    Rabin-Karp 算法(字符串快速查找) 算法 代码 算法 Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法.Rabin-Karp 算法是基于这样的思路 ...

  3. 【字符串】字符串查找 ( Rabin-Karp 算法 )

    文章目录 一.字符串查找 二.Rabin-Karp 算法 一.字符串查找 算法题目链接 : https://www.lintcode.com/problem/13/ 在 一个字符串 中查找 另外一个字 ...

  4. 【字符串】最长回文子串 ( 蛮力算法 )

    文章目录 一.回文串.子串.子序列 二.最长回文子串 1.蛮力算法 2.时间复杂度最优方案 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都一样的 ...

  5. C++Rabin Karp算法字符串快速查找(附完整源码)

    C++Rabin Karp算法字符串快速查找 C++Rabin Karp算法字符串快速查找完整源码(定义,实现,main函数测试) C++Rabin Karp算法字符串快速查找完整源码(定义,实现,m ...

  6. 经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法

    0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法,判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集: int sub ...

  7. hiho1482出勤记录II(string类字符串中查找字符串,库函数的应用)

    string类中有很多好用的函数,这里介绍在string类字符串中查找字符串的函数. string类字符串中查找字符串一般可以用: 1.s.find(s1)函数,从前往后查找与目标字符串匹配的第一个位 ...

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

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

  9. 一看就懂的字符串匹配算法 之 BM算法

    先来一个导读,关于BM算法开始有了难度,大家一定要静下心,咬着呀也得给我读下去,这样你才能有收获. 我们在文本编辑器中,我们经常用到查找及替换功能.比如说,在Word文件中,通过查找及替换功能,可以把 ...

最新文章

  1. UI设计培训学习中必须掌握的设计原则
  2. 联合南京大学,爱奇艺智能论文入选顶会CVPR 2021
  3. 5300亿参数的「威震天-图灵」,微软、英伟达合力造出超大语言模型
  4. python soup提取叶子标签_python3用BeautifulSoup抓取div标签
  5. net::ERR_ABORTED ,引入js文件出现报错的解决方法
  6. bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】
  7. spring发邮件_跟踪异常–第4部分– Spring的邮件发件人
  8. JimuReport积木报表——如何设计一张带二维码的打印报表?
  9. C语言排序方法-----希尔排序
  10. Groovy 转换JSON和生产JSON
  11. css框架之 ---- SASS
  12. java字符串拼接还是格式化_Java中三种字符串的拼接(++ , String.format , StringBuilder.a...
  13. 合成分红游戏源码_养成合成分红游戏源码,广告分红游戏开发
  14. 谷歌邮箱lmap服务器填什么_Gmail IMAP的应用技巧
  15. Type-c接口及其协议介绍
  16. 持久记录精彩时刻,汉印CP4000体验
  17. ipad手写笔有必要买原装吗?第三方性价比高的手写笔推荐
  18. Python操作excel之openpyxl
  19. 编曲软件FL studio20.8中文版功能和作用
  20. wince蓝屏_Windows7更新补丁蓝屏错误代码6B的暂时解决方法

热门文章

  1. 这样就可以很方便的知道明天的天气了
  2. Hdoj 1846.Brave Game 题解
  3. webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
  4. 在CentOS上搭建PHP服务器环境
  5. 自定义带DropDownTable的TextField(事件)
  6. Expression: _CrtIsValidHeapPointer(pUserData)
  7. cmake用法及常用命令总结(全)
  8. 抽象类和接口-手机小案例
  9. [Swift]LeetCode388. 文件的最长绝对路径 | Longest Absolute File Path
  10. System.LazyT 延迟加载