您的位置:首页 > 其它

LeetCode Implement strStr()

2015-09-20 05:19 429 查看
原题链接在这里: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来唯一代表一段字符串,方法参见了这篇帖子:/article/1378346.html

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算法,参见如下两篇文章:

/article/1362918.html

http://blog.csdn.net/Evan123mg/article/details/46834827
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: