列表

详情


2301. 替换字符后匹配

给你两个字符串 s 和 sub 。同时给你一个二维字符数组 mappings ,其中 mappings[i] = [oldi, newi] 表示你可以将 sub 中任意数目的 oldi 字符替换为 newi 。sub 中每个字符 不能 被替换超过一次。

如果使用 mappings 替换 0 个或者若干个字符,可以将 sub 变成 s 的一个子字符串,请你返回 true,否则返回 false 。

一个 子字符串 是字符串中连续非空的字符序列。

 

示例 1:

输入:s = "fool3e7bar", sub = "leet", mappings = [["e","3"],["t","7"],["t","8"]]
输出:true
解释:将 sub 中第一个 'e' 用 '3' 替换,将 't' 用 '7' 替换。
现在 sub = "l3e7" ,它是 s 的子字符串,所以我们返回 true 。

示例 2:

输入:s = "fooleetbar", sub = "f00l", mappings = [["o","0"]]
输出:false
解释:字符串 "f00l" 不是 s 的子串且没有可以进行的修改。
注意我们不能用 'o' 替换 '0' 。

示例 3:

输入:s = "Fool33tbaR", sub = "leetd", mappings = [["e","3"],["t","7"],["t","8"],["d","b"],["p","b"]]
输出:true
解释:将 sub 里第一个和第二个 'e' 用 '3' 替换,用 'b' 替换 sub 里的 'd' 。
得到 sub = "l33tb" ,它是 s 的子字符串,所以我们返回 true 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool matchReplacement(string s, string sub, vector<vector<char>>& mappings) { } };

python3 解法, 执行用时: 1476 ms, 内存消耗: 31.2 MB, 提交时间: 2023-06-13 14:32:58

class Solution:
    def matchReplacement(self, s: str, sub: str, mappings: List[List[str]]) -> bool:
        d = {}
        for k,v in mappings:
            d[k] = d.get(k, k) + v
        return bool(re.search("".join(f"[{d.get(c, c)}]" for c in sub), s))

golang 解法, 执行用时: 36 ms, 内存消耗: 4.9 MB, 提交时间: 2023-06-13 14:32:37

func matchReplacement(s, sub string, mappings [][]byte) bool {
	mp := ['z' + 1]['z' + 1]bool{}
	for _, p := range mappings {
		mp[p[0]][p[1]] = true
	}
next:
	for i := len(sub); i <= len(s); i++ {
		for j, c := range s[i-len(sub) : i] {
			if byte(c) != sub[j] && !mp[sub[j]][c] {
				continue next
			}
		}
		return true
	}
	return false
}

python3 解法, 执行用时: 2508 ms, 内存消耗: 16.6 MB, 提交时间: 2023-06-13 14:32:18

# 预处理 + 暴力枚举
class Solution:
    def matchReplacement(self, s: str, sub: str, mappings: List[List[str]]) -> bool:
        mp = set((x, y) for x, y in mappings)
        for i in range(len(sub), len(s) + 1):
            if all(x == y or (x, y) in mp for x, y in zip(sub, s[i - len(sub): i])):
                return True
        return False

上一题