给定两个相同大小的字符串数组 A 和 B,再给一个字符串 S,所有出现在 S 里的子串 A 都要替换成 B。(注意:从左往右,能替换的必须替换,如果有多种替换方案,替换更长的优先。替换后的字符不能再做替换)
注意事项
- 每个字符串数组的大小不超过100,总字符串长度不超过50000。
- A[i] 和B[i]的长度相等。
- S的长度不超过50000。
- 所有字符均为小写字母。
- 保证A数组没有相同的字符串
给出 A = ["ab","aba"] , B = ["cc","ccc"] , S = "ababa" , 返回 "cccba"。
按照规则,从左往右能替换的是“ab”或者“aba”,由于“aba”替换的更长,故将”aba”替换为”ccc”。
给出 A = ["ab","aba"] , B = ["cc","ccc"] , S = "aaaaa" , 返回 "aaaaa"。
S中没有包含A中的字符串,故不做替换。
给出 A = ["cd","dab","ab"], B = ["cc","aaa","dd"], S = "cdab", 返回 "ccdd"。
从左往右,最开始可以发现"cd"可以被替换,故替换后变成了"ccab",接下来可以发现"ab"可以被替换,故替换后的字符串为"ccdd"。
- 因为取最长的替换,将 a 中所有字符串的长度倒序排列(去重);
- s 不为空时执行下列操作:
- 循环 a 的字符串长度列表,查找 s 从左开始那么长的字符串是否在 a 中;
- 如果在 a 中,通过在 a 中的索引找到 b 中的字符串,添加到 answer,新的 s 为去掉刚才被替换的字符串的字符串;
- 如果全部长度不在 a 中,s[0] 添加到 answer,s 去掉 s[0]。
- 返回结果