原题链接在这里: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

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

被折叠的 条评论
为什么被折叠?



