刚开始学Java,用String类提供的函数练练手。
这道题要求子串第一次出现的位置,参考介绍String类的那篇博客,其实用 indexOf()函数就可以了。
public class Solution {
public int strStr(String haystack, String needle) {
return haystack.indexOf(needle);
}
}
然后是正常做法,效率慢很多。。。。
主要思路就是用第一层循环判断母串每一个位置上是否是子串的起点,可能的取值最大是haystack.length() - needle.length()。再用j从i开始循环,用j - i 表示相对应位置的子串中的字符然后比较。
public class Solution {
public int strStr(String haystack, String needle) {
if(needle.length() == 0)return 0;
for(int i = 0; i <= haystack.length() - needle.length(); i++) {
for(int j = i; j < haystack.length(); j++) {
int d = j - i;
if(haystack.charAt(j) != needle.charAt(d))break;
if(d == needle.length() - 1)return i;
}
}
return -1;
}
}