1055. 形成字符串的最短路径
对于任何字符串,我们可以通过删除其中一些字符(也可能不删除)来构造该字符串的子序列。
给定源字符串 source
和目标字符串 target
,找出源字符串中能通过串联形成目标字符串的子序列的最小数量。如果无法通过串联源字符串中的子序列来构造目标字符串,则返回 -1
。
示例 1:
输入:source = "abc", target = "abcbc"
输出:2
解释:目标字符串 "abcbc" 可以由 "abc" 和 "bc" 形成,它们都是源字符串 "abc" 的子序列。
解法一:贪心
思想
s
串中的子序列尽量的长,则所构成 t
串所需要的 s
串就越少。
复杂度
时间复杂度:
O
(
N
M
)
O(NM)
O(NM),
N
N
N 是 s
串长度,
M
M
M 是 t
串长度
空间复杂度: O ( 1 ) O(1) O(1)
代码
class Solution {
public int shortestWay(String s, String t) {
int n = s.length(), m = t.length();
int i = 0, res = 0;
while (i < m {
int j = i;
for (int k = 0; k < n; k++) {
if (i < t.length() && t.charAt(i) == s.charAt(k)) {
i++;
}
}
if (j == i) return -1;
res++;
}
return res;
}
}