给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1用动态规划java语言
时间: 2024-02-11 08:03:41 浏览: 51
好的,以下是使用动态规划算法解决字符串匹配问题的 Java 代码实现:
```java
public static int match(String s, String n) {
int m = s.length(), k = n.length();
if (m < k) {
return -1;
}
boolean[][] dp = new boolean[m][k];
for (int i = 0; i < k; i++) {
if (s.charAt(i) == n.charAt(i)) {
dp[i][i] = true;
}
}
for (int i = k; i < m; i++) {
for (int j = 0; j < k; j++) {
if (s.charAt(i) == n.charAt(j)) {
dp[i][j] = dp[i-1][j-1];
} else {
dp[i][j] = false;
}
}
if (dp[i][k-1]) {
return i-k+1;
}
}
return -1;
}
```
其中,dp[i][j] 表示 s 字符串中以 i 结尾的子串是否匹配 n 字符串中以 j 结尾的子串。如果匹配,那么 dp[i][j] 的值为 true,否则为 false。如果 dp[i][j] 的值为 true,那么说明 s 中以 i 结尾的子串和 n 中以 j 结尾的子串匹配成功,那么第一个位置就是 i-j。
时间复杂度为 O(nk),其中 n 和 k 分别是 s 和 n 字符串的长度。
阅读全文