java leetcode之[数据结构 简单]28. 实现 strStr()
2021/7/27 11:07:29
本文主要是介绍java leetcode之[数据结构 简单]28. 实现 strStr(),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目的链接在这里:https://leetcode-cn.com/problems/implement-strstr/
目录
- 题目大意
- 一、示意图
- 二、解题思路
- 暴力
- 双指针
- 暴力循环起始位置
题目大意
实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
一、示意图
二、解题思路
方法一是使用暴力还是就是双指针最后一种也是一种暴力
暴力
代码如下:
class Solution { public int strStr(String haystack, String needle) { //找到第一个位置 找不到返回-1 //先排除特殊情况 if(needle.equals("")) return 0; //首先第一种方法就是暴力 char hayChar[]=haystack.toCharArray(); char needChar[]=needle.toCharArray(); //用来返回最后的位置 int count=0; //用来做标记 boolean flag=false; for(int i=0;i<hayChar.length;i++){ //然后进行判断 if(hayChar[i]==needChar[0]){ //相当于是找到第一个位置了 //这里可能要做个标记吧 count=i; //这两个作为比较的暂存数据 int tempI=i; int tempN=0; while (tempI<hayChar.length&&tempN<needChar.length){ //只要条件符合一直判断 //把这个条件要放内部吧 if(hayChar[tempI]==needChar[tempN]) { tempI++; tempN++; } else{ break; } } //然后跳出循环之后 是不是得判断一下temp是不是到最后一个了 说明ok了 if(tempN==needChar.length){ //说明在最后一个 return count; } //不然就说明是有问题的 //这里有问题不能break } } //最后结果 return -1; } }
双指针
代码如下:
class Solution { public int strStr(String haystack, String needle) { if (needle.equals("")) return 0; //使用双指针 int left=0; int need=0; int index=0; while (left<haystack.length()&&need<needle.length()){ //就开始判断 if(haystack.charAt(left)==needle.charAt(need)){ //说明他们这个位置是可以的 就进行更新 //但是怎么存这个第一个位置呢 left++; need++; } //如果不相等的话 else{ //如果不相等的话 是要从当初的那个位置开始出发 而不是直接就从这边出发的 //所以是当初指定的起始位置加一的位置出发 //index作为起始位置 index++; left=index; need=0; } } //最后判断index有没有更新 并且最后的值是不是等于长度 return need==needle.length()?index:-1; } }
暴力循环起始位置
代码如下:
class Solution { public int strStr(String haystack, String needle) { //还有一个暴力判断的方法 char[] hay=haystack.toCharArray(); char[] need=needle.toCharArray(); //这里的特殊情况也都排除掉 if(need.length==0) return 0; if(haystack.equals(needle)) return 0; if(need.length>=hay.length) return -1; for(int i=0;i<=hay.length-need.length;i++){ //i是作为第一个数组 他最小一定是0 最大的话 也一定是 大的长度减去小的长度 //并在里面再进行一次循环 int j=0; for( j=0;j<need.length;j++){ //不用去管相等的时候 if(hay[i+j]!=need[j]){ //如果不相等了 离开退出 break; } } //还有一个是直接判断长度 //这个要拿出来判断 if(j==need.length) return i; } //这样子都没成功的话 return -1; } }
这篇关于java leetcode之[数据结构 简单]28. 实现 strStr()的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?
- 2024-12-23汽车4S店运营效率提升的核心工具