题目描述:
字符串索引
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
一道字符串处理的简单题目。返回needle在haystack中的位置,无则返回-1.
java的话,最简答就是调用indexOf()。
自己写的话,我的思路是将两个字符串拆为char数组,两个for循环,第一个循环遍历haystack数组,第二个循环遍历needle数组。需要额外的两个变量,一个用于在第二循环中遍历haystack,另一个用于判断结束条件。结束条件有两个,一个是haystack已经遍历完了,还有一个是找到了一个needle。
class Solution {
public int strStr(String haystack, String needle) {
if(needle.length()>haystack.length()){
return -1;
}
if(needle.equals(haystack)){
return 0;
}
char[] haystack_array=haystack.toCharArray();
char[] needle_array=needle.toCharArray();
for(int i=0;i<haystack_array.length;i++){
int n=i;
int m=0;
for(int j=0;j<needle_array.length;j++){
if(n==haystack_array.length){ //可能出现“abcef”“cefgh”,超出范围的情况
return -1;
}
if(haystack_array[n]==needle_array[j]){
n++;
m++;
}else {
break;
}
}
if(m==needle_array.length){
return i;
}
}
return -1;
}
}
LeetCode上更好的解决思路:
不断截取字符串,判断是否相等。(一直没有考虑截取函数substring(),以后学会使用)
public class Solution {
public int strStr(String haystack, String needle) {
int lastIdx = haystack.length() - needle.length();
for(int i = 0; i <= lastIdx; i++) {
if(haystack.substring(i, i+needle.length()).equals(needle)) {
return i;
}
}
return -1;
}
}
更多算法内容 关注 FunctionY csdn博客