Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

描述

给定两个相同大小的字符串数组 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"。

思路

复杂度 O(len(a) * len(s))

  1. 因为取最长的替换,将 a 中所有字符串的长度倒序排列(去重);
  2. s 不为空时执行下列操作:
    1. 循环 a 的字符串长度列表,查找 s 从左开始那么长的字符串是否在 a 中;
    2. 如果在 a 中,通过在 a 中的索引找到 b 中的字符串,添加到 answer,新的 s 为去掉刚才被替换的字符串的字符串;
    3. 如果全部长度不在 a 中,s[0] 添加到 answer,s 去掉 s[0]。
  3. 返回结果