给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1(需要给出多个测试用例,证明算法的正确性)。根据《算法设计与分析》所学知识如回溯法求解,给出Java代码并标注
时间: 2024-02-15 08:03:04 浏览: 71
下面是回溯法实现的Java代码,用于在s字符串中找出n字符串出现的第一个位置:
```
public class Backtracking {
public static void main(String[] args) {
String s = "hello world";
String n = "world";
int pos = findSubstring(s, n);
System.out.println(pos); // 6
}
public static int findSubstring(String s, String n) {
char[] sChars = s.toCharArray();
char[] nChars = n.toCharArray();
for (int i = 0; i <= sChars.length - nChars.length; i++) {
if (match(sChars, i, nChars)) {
return i;
}
}
return -1;
}
private static boolean match(char[] s, int start, char[] n) {
for (int i = 0; i < n.length; i++) {
if (s[start + i] != n[i]) {
return false;
}
}
return true;
}
}
```
测试用例:
```
@Test
public void testFindSubstring() {
String s1 = "hello world";
String n1 = "world";
assertEquals(6, Backtracking.findSubstring(s1, n1));
String s2 = "hello world";
String n2 = "java";
assertEquals(-1, Backtracking.findSubstring(s2, n2));
String s3 = "hello world";
String n3 = "hello";
assertEquals(0, Backtracking.findSubstring(s3, n3));
String s4 = "hello";
String n4 = "lo";
assertEquals(3, Backtracking.findSubstring(s4, n4));
}
```
以上测试用例证明了算法的正确性。
阅读全文