用另一种方法写给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1(需要给出多个测试用例,证明算法的正确性)。
时间: 2024-02-19 20:59:07 浏览: 57
去掉重复的字符串及在第一个字符串中删除在第二个字符串中出现的字符
好的,这里给出另一种基于Java的实现算法,也可以用来解决这个问题。
```
public class FindStringIndex {
public static int findIndex(String s, String n) {
if (s == null || n == null || s.length() < n.length()) {
return -1;
}
int i = 0, j = 0;
while (i < s.length() && j < n.length()) {
if (s.charAt(i) == n.charAt(j)) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if (j == n.length()) {
return i - j;
} else {
return -1;
}
}
public static void main(String[] args) {
String s1 = "hello world";
String n1 = "world";
int index1 = findIndex(s1, n1);
System.out.println(index1); // 6
String s2 = "hello world";
String n2 = "Java";
int index2 = findIndex(s2, n2);
System.out.println(index2); // -1
String s3 = "This is a test string";
String n3 = "test";
int index3 = findIndex(s3, n3);
System.out.println(index3); // 10
}
}
```
上述代码中,`findIndex`方法接受两个字符串作为参数,分别表示原始字符串`s`和要查找的字符串`n`。首先判断`s`和`n`是否为空,或者`s`的长度小于`n`的长度,如果是,则返回-1。然后使用两个指针`i`和`j`分别指向`s`和`n`字符串的起始位置,同时开始进行比较。如果`s.charAt(i)`等于`n.charAt(j)`,则两个指针同时向后移动一位;否则,`i`回退到上一次匹配的位置加1,`j`回退到0,重新开始匹配。直到`j`移动到`n`字符串的末尾,此时找到了匹配的子串,返回子串在`s`字符串中的起始位置;如果循环结束后`j`没有移动到`n`字符串的末尾,则说明没有匹配的子串,返回-1。
同样,通过在`main`方法中给出不同的测试用例,可以证明算法的正确性。
阅读全文