B站视频地址:https://www.bilibili.com/video/BV1tG4y1a78A/?vd_source=a0bea6f5def58dc5711647a825ed97b6
代码
class Solution {
public int shortestWay(String source, String target) {
int sourceLength = source.length();
int targetLength = target.length();
int[][] dp = new int[sourceLength + 1][26];
for (int i = 0; i < 26; i++) {
dp[sourceLength][i] = sourceLength;
}
for (int i = sourceLength - 1; i >= 0; i--) {
for (int j = 0; j < 26; j++) {
if (source.charAt(i) - 'a' == j) {
dp[i][j] = i;
} else {
dp[i][j] = dp[i + 1][j];
}
}
}
int targetIndex = 0;
int count = 0;
while (targetIndex < targetLength) {
int startPosition = 0;
if (dp[startPosition][target.charAt(targetIndex) - 'a'] == sourceLength) {
return -1;
}
count++;
while (targetIndex < targetLength && dp[startPosition][target.charAt(targetIndex) - 'a'] != sourceLength) {
startPosition = dp[startPosition][target.charAt(targetIndex) - 'a'] + 1;
targetIndex++;
}
}
return count;
}
}