Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode刷题28实现 strStr()
前文
本文为leetcode遍历效率类型问题,题目序号为28,主要考察遍历时的效率。
题目信息
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
解题思路
根据题目信息,本题目所考察的就是字符串中是否包含另一字符串的操作。其实在每种语言中都有封装好的该方法,这里手动实现一下。不过本文所分享的方法仅为比较基础的暴力解法,效率上属于比较慢的一种。具体来看思路,就是利用双指针,其中一个指针q,会根据给定字符串进行位置遍历。随着位置向前,每个位置都跟需要的字符串进行比较操作。如果完全相等,则记录该q的位置将其赋值给p,并返回p作为结果。如果有其中任意一位不相等,则直接跳过比较循环,q向前移动一位。按此方式进行操作,如果存在就会返回实际的位置,如果不存在就会返回-1,也就达到了题目的目标要求。
解题代码
public int strStr(String haystack, String needle) {
if("".equals(needle)){
return 0;
}
int q = 0;
int p = -1;
char[] m = haystack.toCharArray();
char[] n = needle.toCharArray();
int length = m.length - n.length;
while(q <= length){
int pos = 0;
boolean needBreak = false;
for (int i = 0; i < n.length; i++) {
if(m[i + q] != n[i]){
break;
}
if(i == n.length - 1){
needBreak = true;
}
}
if(needBreak){
p = q;
break;
}
q++;
}
return p;
}
复制代码
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。