LeetCode Implement strStr()

本文深入探讨了Java中字符串匹配的相关API和算法实现,包括indexOf方法的应用、暴力搜索算法、哈希码方法和KMP算法。文章详细介绍了每种方法的工作原理、代码实现以及优缺点,并提供了实例代码供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接在这里:https://leetcode.com/problems/implement-strstr/

原来Java里有这么个API, str.indexOf(subString). 这是API的用法:http://www.tutorialspoint.com/java/java_string_indexof.htm

AC Java:

public class Solution {
    public int strStr(String haystack, String needle) {
        return haystack.indexOf(needle);
    }
}


Brute force的算法是从haystack头开始走,每次取后面长度与needle长度相等的substring, 看这个substring与needle是否相同即可。

AC Java:

public class Solution {
    public int strStr(String haystack, String needle) {
        if(haystack == null || needle == null || haystack.length() < needle.length()){
            return -1;
        }
        if(needle.length() == 0 && haystack.length() == 0){
            return 0;
        }
        for(int i = 0; i+needle.length()<=haystack.length(); i++){
            if(haystack.substring(i,i+needle.length()).equals(needle)){
                return i;
            }
        }
        return -1;
    }
}

还可以用HashCode来唯一代表一段字符串,方法参见了这篇帖子: http://blog.youkuaiyun.com/linhuanmars/article/details/20276833

e.g.字符串“abacd",转化为hashcode=1*29^0+2*29+1*29^2+3*29^3+4*29^4。然后是如何在前进一步的时候计算新的hashcode,比如匹配串是原串是”abacde“,匹配串长度为5, 根据以上的方法计算”abacd“的hashcode=h,那么下一步的hashcode=h/29+5*29^4即可。但这种方法算29的最高次幂是needle的长度,即使用了long 也会爆缸。

本题还可以采用KMP算法,参见如下两篇文章:

http://blog.youkuaiyun.com/v_july_v/article/details/7041827

http://blog.youkuaiyun.com/Evan123mg/article/details/46834827


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值