题目:
简述题目:
如果某一个字符串为空,则返回0;若字符串needle不是字符串haystack的子串,则返回-1;若是子串,则返回开始位置的下标
思路:
方法1:用函数haystack.contains(needle)来判断是否是子串,如果不是直接返回-1,如果是,则循环找出开始位置的下标。
class Solution {
public int strStr(String haystack, String needle) {
char[] hArray = haystack.toCharArray();
char[] nArray = needle.toCharArray();
int flag = 0;
if(!haystack.contains(needle)){
return -1;
}else{
for(int i = 0; i < haystack.length();i++){
for(int j = 0; j < needle.length();j++){
if (hArray[i+j] != nArray[j])
break;
if(j == needle.length()-1){
flag = i;
return i;
}
}
}
return flag;
}
}
}
方法2:直接循环遍历,如果有则返回下标,如果都遍历完还没有,就直接返回-1
但是这个方法需要先判断两个字符串的长度是否为0,子串的长度是否小于haystack的长度
public class ImplementstrStr28 {
public static int strStr(String haystack, String needle) {
char[] hArray = haystack.toCharArray();
char[] nArray = needle.toCharArray();
if(needle.length() > haystack.length()){
return -1;
}else if(needle.length() == 0 || haystack.length() == 0){
return 0;
}else{
for(int i = 0; i < haystack.length();i++){
for(int j = 0; j < needle.length();j++){
if (hArray[i+j] != nArray[j])
break;
if(haystack.length() - i < needle.length())
return -1;
if(j == needle.length()-1){
return i;
}
}
}
return -1;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "mississippi";
String t = "issipi";
System.out.println(strStr(s,t));
}
}