【发布时间】:2021-02-26 01:21:59
【问题描述】:
我有一个列表中唯一字符串的列表。我需要找到配对元素。配对元素是匹配以下任一条件的元素
- 如果字符串 A 和 B 以“_N”结尾且 B 以“_P”结尾,则字符串 A、B 是一对,反之亦然,例如:ABCD_N 和 ABCD_P 是一对
- 字符串 A、B 是一对,如果将出现的“N”替换为“P”,则会得到字符串 B,反之亦然。 例如:ABNX,ABPX 都是对
现在我正在循环列表并在列表的其余部分中搜索其对应的对并将它们配对,至少为 O(n^2),我的字符串列表可能高达一百万
for(int i = 0; i < list.Count; i++)
{
for(int j=0;j<list.Count && j != i; j++)
{
if(list[i].EndsWith("_N") || list[j].EndsWith("_P"))
{
//Call method to find corresponding pair for this string; O(n)
//Call my processPairsmethod()
}
}
}
其他选项是正则表达式,我可以利用它来结束 _N 和 _P 条件,但不确定如何获得第二个条件的正则表达式。
PS:list中不存在重复项
任何指针都会有帮助
【问题讨论】:
-
第二个条件不是已经覆盖第一个了吗?
-
无论如何,如果保证列表没有重复项,最好使用
HashSet。现在,元素是否可以包含多个Ns 或Ps?如果是这样,您是只替换一次还是全部替换? -
是的...元素可以包含多个N或P。这种情况下,我们应该将它们全部替换并检查残差列表中对应的字符串名称。
-
不,第一个条件只是查看带有“_N”或“_P”的字符串结尾,如果字符串的其他部分有 N 或 P,则不会打扰。第二个条件仅涵盖第一个如果字符串不包含 N 除了最后一个 _N