LeetCode刷题(Java)——4.Implement strstr()

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Clarification:

What should we return when needle is an empty string? This is a great question to ask during an interview.

For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's strstr() and Java's indexOf().

本娃子码的代码,时间超限了,所以也没法调试,这里也放一下:

class Solution {
    public int strStr(String haystack, String needle) {
        int result = -1;
        for(int i=0,j=0;i<haystack.length();){
            if(haystack.charAt(i) == needle.charAt(j)){
                if(j==0){
                    result=i;
                }
                i++;
                j++;
                if(j == needle.length()){
                    break;
                }
            }
        }
        return result;
    }
}

然后去看这题的文档,总结如下,感触颇多:

我写的方法就是蛮力方法,即从第一个位置开始匹配后续字母,假设n=haystack的length, m=needle的length,则时间复杂度为:O(nm)。可以考虑以下几种情况:

1. 两个都为空。如果needle为空,总是返回0;如果haystack为空,needle不为空,则返回 -1,因为没有值匹配;

2.needle的长度大于haystack的长度,很明显,没有值匹配,返回-1;

3.如果有两个长度相等都为n的长串:"aa……aa","aa……ab",你不需要做超过n个字符的对比,否则就会导致时间超限

基于以上几点,被AC代码如下:

class Solution {
    public int strStr(String haystack, String needle) {
        for(int i=0; ;i++){
            for(int j=0; ;j++){
                if(j == needle.length()) return i;
                if(i + j == haystack.length()) return -1;
                if(needle.charAt(j) != haystack.charAt(i+j)) break;
            }
        }
    }
}

温馨小提示:Java中可以使用indexOf来返回一个整数值,例如:

int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引,如果没有找到就返回-1.

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值