如何实现字符串中重复数字前缀项保留最后出现项的处理
实现方法与代码示例
核心逻辑很直接:用键值对记录每个数字前缀对应的最新字符组合,后续出现的同前缀组合会覆盖之前的,最后按数字首次出现的顺序拼接结果即可。
步骤拆解
- 将原始字符串按
:分割为单个字符组合列表,比如把"1b:2c:3a:4d:1c:2b"拆成["1b", "2c", "3a", "4d", "1c", "2b"]。 - 遍历列表,用字典存储每个数字前缀(组合的第一个字符)对应的最新组合——字典的键具有唯一性,后续同键值会直接覆盖旧值,自动实现“保留最后出现项”的需求。
- 若要和目标结果的顺序一致(保持数字前缀的首次出现顺序),额外用一个列表记录首次出现的数字键,最后按这个顺序从字典中取值拼接。
C# 代码实现
string x = "1b:2c:3a:4d:1c:2b"; // 拆分字符串为单个组合 var parts = x.Split(':'); var latestMap = new Dictionary<char, string>(); var keyOrder = new List<char>(); foreach (var part in parts) { char key = part[0]; // 仅首次遇到该数字前缀时记录顺序 if (!latestMap.ContainsKey(key)) { keyOrder.Add(key); } // 覆盖存储最新的字符组合 latestMap[key] = part; } // 按首次出现顺序拼接成目标字符串 string y = string.Join(":", keyOrder.Select(k => latestMap[k])); // y 的结果为 "1c:2b:3a:4d"
Python 代码实现
x = "1b:2c:3a:4d:1c:2b" # 拆分字符串 parts = x.split(':') latest_map = {} key_order = [] for part in parts: key = part[0] if key not in latest_map: key_order.append(key) latest_map[key] = part # 按顺序拼接结果 y = ':'.join([latest_map[k] for k in key_order]) # y 的结果为 "1c:2b:3a:4d"
内容的提问来源于stack exchange,提问作者cielo
相关产品推荐
相关产品推荐

