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