028 实现strStr()
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
思路:这道题是道简单题,你只需要遍历haystack字符串,如果有字符needle的第一个字符,即开始判断,分别遍历两个字符串,一旦当字符不相等就break跳出循环,如果最后的变量needle的长度,则说明有字符串,然后判断开始记下的haystack的值
代码:
public int strStr(String haystack, String needle) {
//return haystack.indexOf(needle); //Java中的indexOf方法
if(needle.length()==0 ) return 0;
if(needle.length()>haystack.length()) return -1;
//int i=0;
char cn = needle.charAt(0);
for(int j=0;j<haystack.length();j++){
char ch = haystack.charAt(j);
if(ch==cn){
int m=j+1;
int k;
//进行needle字符串和haystack字符串的同时遍历
for(k=1;k<needle.length();k++){
if(m<haystack.length()){
char cnn = needle.charAt(k);
char chh = haystack.charAt(m);
if(chh!=cnn) break;
m++;
}else return -1; //如果haystack字符串遍历到了终点,说明不存在needle字符串
}
if(k==needle.length()) { //遍历到needle字符串的终点,说明找到位置
return j;
}
}
}
return -1;
}
注意:开始前还需对两种特殊情况进行判断,haystack的值为0就返回0,如果haystack的值小于needle则返回-1;