持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
一、题目与题目分析
题目
实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
- 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
- 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
(题目来源:力扣:28.实现strStr())
题目分析
strStr()函数;管它啥函数,理解要做的事情就好了。就是匹配字符串,返回匹配字符串的首位置。好比一本词典,一本书,拿这个单词(词语)去这本书找,是否有对应的单词(词语)
举例1: 一个单词书本“abcdefghijklmn”,找里面是否有“cd”单词;有就返回该单词对应的第一个词位置,也就是第三个,对应2(因为第一个匹配的是0)。
举例2: 又是一个单词书本“abcdefghijklmn”,找里面是否有“adc”单词;但是这里并没有这个词,也就得返回-1。
二、整体逻辑与主要代码
题目分析已经比较清楚了,接下来我们进入代码设计。
整体逻辑
先判断单词和书本的长度大小,单词都比书本长度大的,直接返回-1(该单词不存在)。如果单词是空的,即就是查空的,也就直接返回0。最后,进行书本和单词匹配,先找到第一个字母匹配的,再进行匹配完整的单词。(第一个字母都不匹配,就不继续往下浪费时间啦~)
主要代码
整体逻辑清晰了之后,同时也有较清楚的注释。直接来看代码吧! (如有不懂的或者更好的建议,欢迎评论区分享友友的看法哈~)
class Solution {
public static int strStr(String haystack, String needle) {
// 查找字符串的不要
if (needle.length() == 0) {
return 0;
}
// 查找的字符串的长度大于被查找字符串的长度也不要
if (needle.length() > haystack.length()) {
return -1;
}
// 这里就把haystack比作字典,needle比作字词;在字典里找是否有对应的这个词
char[] words = needle.toCharArray(); // 单词
char[] dictionary = haystack.toCharArray(); // 字典
for (int i = 0; i < dictionary.length; i++) {
// 遍历字典
if (dictionary[i] != words[0]) {
// 单词第一个就不对的跳过
continue;
}
// 字典快翻完了,小于单词长度也直接打断跳出
if (words.length > dictionary.length - i) {
break;
}
boolean flag = true; // 默认标记单词找到了并完全匹配
for (int j = 0; j < words.length; j++) {
if (dictionary[i + j] != words[j]) {
// 遍历单词,发现单词有不一样的,匹配失败;打断跳出当前j循环
flag = false;
break;
}
}
// 匹配上的位置
if (flag) {
return i;
}
}
return -1;
}
}
三、结果展示
四、人生总结
你好,再见。
题目数据库
Gitee:传送门
文章小尾巴
文章写作、模板、文章小尾巴可参考:《写作“小心思”》
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是南方者,一个热爱计算机更热爱祖国的南方人。
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)