【字符串】字符串查找 ( 蛮力算法 )
文章目录
- 一、字符串查找
- 二、蛮力算法代码示例
一、字符串查找
算法题目链接 : 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);}
}
【字符串】字符串查找 ( 蛮力算法 )相关推荐
- java对字符串快查找_字符串快速查找 - Trie算法
Trie算法 先对给定的字符串进行归集,形成一个多叉树形结构. 使用字符导航方式作匹配查找. trie算法有很多变种,以最左(前缀)匹配为例进行说明. 优点 使用字符导航查找方式,能最大限度减少字符比 ...
- Rabin-Karp 算法(字符串快速查找)
Rabin-Karp 算法(字符串快速查找) 算法 代码 算法 Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法.Rabin-Karp 算法是基于这样的思路 ...
- 【字符串】字符串查找 ( Rabin-Karp 算法 )
文章目录 一.字符串查找 二.Rabin-Karp 算法 一.字符串查找 算法题目链接 : https://www.lintcode.com/problem/13/ 在 一个字符串 中查找 另外一个字 ...
- 【字符串】最长回文子串 ( 蛮力算法 )
文章目录 一.回文串.子串.子序列 二.最长回文子串 1.蛮力算法 2.时间复杂度最优方案 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都一样的 ...
- C++Rabin Karp算法字符串快速查找(附完整源码)
C++Rabin Karp算法字符串快速查找 C++Rabin Karp算法字符串快速查找完整源码(定义,实现,main函数测试) C++Rabin Karp算法字符串快速查找完整源码(定义,实现,m ...
- 经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法
0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法,判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集: int sub ...
- hiho1482出勤记录II(string类字符串中查找字符串,库函数的应用)
string类中有很多好用的函数,这里介绍在string类字符串中查找字符串的函数. string类字符串中查找字符串一般可以用: 1.s.find(s1)函数,从前往后查找与目标字符串匹配的第一个位 ...
- 字符串匹配:字符串中查找某子串
字符串匹配:字符串中查找某子串 需求 具体算法 常规方法 程序 KMP算法 程序 后续 需求 我们在平时的软件开发,尤其是嵌入式开发,字符串匹配是非常重要的一个算法.而目前常用的字符串匹配算法有很多, ...
- 一看就懂的字符串匹配算法 之 BM算法
先来一个导读,关于BM算法开始有了难度,大家一定要静下心,咬着呀也得给我读下去,这样你才能有收获. 我们在文本编辑器中,我们经常用到查找及替换功能.比如说,在Word文件中,通过查找及替换功能,可以把 ...
最新文章
- UI设计培训学习中必须掌握的设计原则
- 联合南京大学,爱奇艺智能论文入选顶会CVPR 2021
- 5300亿参数的「威震天-图灵」,微软、英伟达合力造出超大语言模型
- python soup提取叶子标签_python3用BeautifulSoup抓取div标签
- net::ERR_ABORTED ,引入js文件出现报错的解决方法
- bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】
- spring发邮件_跟踪异常–第4部分– Spring的邮件发件人
- JimuReport积木报表——如何设计一张带二维码的打印报表?
- C语言排序方法-----希尔排序
- Groovy 转换JSON和生产JSON
- css框架之 ---- SASS
- java字符串拼接还是格式化_Java中三种字符串的拼接(++ , String.format , StringBuilder.a...
- 合成分红游戏源码_养成合成分红游戏源码,广告分红游戏开发
- 谷歌邮箱lmap服务器填什么_Gmail IMAP的应用技巧
- Type-c接口及其协议介绍
- 持久记录精彩时刻,汉印CP4000体验
- ipad手写笔有必要买原装吗?第三方性价比高的手写笔推荐
- Python操作excel之openpyxl
- 编曲软件FL studio20.8中文版功能和作用
- wince蓝屏_Windows7更新补丁蓝屏错误代码6B的暂时解决方法
热门文章
- 这样就可以很方便的知道明天的天气了
- Hdoj 1846.Brave Game 题解
- webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
- 在CentOS上搭建PHP服务器环境
- 自定义带DropDownTable的TextField(事件)
- Expression: _CrtIsValidHeapPointer(pUserData)
- cmake用法及常用命令总结(全)
- 抽象类和接口-手机小案例
- [Swift]LeetCode388. 文件的最长绝对路径 | Longest Absolute File Path
- System.LazyT 延迟加载