public class Solution { public string ConvertString(string pattern) { var dic = new Dictionary<char, int>(); int code = 0; var str = ""; for (int i = 0; i < pattern.Length; i++) { if (!dic.ContainsKey(pattern[i])) { dic.Add(pattern[i], code); str += code.ToString() + "|"; code++; } else { str += dic[pattern[i]].ToString() + "|"; } } return str; } public IList<string> FindAndReplacePattern(string[] words, string pattern) { var pt = ConvertString(pattern); var list = new List<string>(); foreach (var word in words) { var p = ConvertString(word); if (p.Equals(pt)) { list.Add(word); } } return list; } }
原来的实现中没有加"|"对code进行分割,这样的代码也可以ac,但是会有隐藏的bug,那就是如下两个串会得到相同的编码:
abcdefghijklmn
abcdefghijbabbbcbd
两个字符串都会编码为012345678910111213,加了竖线就不会再有这个bug。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步