(不需要任何网络知识。这纯粹是字符串和列表)。
假设我有一个函数,它接受字符串 IPv4 点分地址列表,并按升序对它们进行排序。(不按字母顺序,真正的 ip 长格式排序)。让我们称之为:
public static ArrayList<String> sortListOfIpv4s(ArrayList<String> unsortedIPv4s);
此功能已经正常工作。给定一个输入:
192.168.1.1, 8.8.8.8, 4.5.6.7, 244.244.244.244, 146.144.111.6
它将输出列表:
4.5.6.7, 8.8.8.8, 146.144.111.6, 192.168.1.1, 244.244.244.244
(我们不要争论是应该修改列表还是返回一个新列表。它只是返回一个新列表。另外,由于多种原因,无法修改函数。)
但是,我的输入列表如下所示:
e192.168.1.1, f8.8.8.8, e4.5.6.7, f244.244.244.244, e146.144.111.6
当我删除前缀(仅 e 或 f 之一,不必交替)并创建一个干净的数组以传递给排序函数时,我会丢失前缀信息。我想要的是以下类型的输出:
e4.5.6.7, f8.8.8.8, e146.144.111.6, e192.168.1.1, f244.244.244.244
基本上,在排序之前,无论未排序列表中的每个元素存在什么前缀,都需要将相同的前缀添加回已排序列表中的元素。
注意事项:
- 一个 IP 地址可以在原始列表中重复,最多重复两次
- 重复两次时,两个元素中的每一个都将具有相同的前缀,保证
- 排序算法不会删除重复项。
请提供一点算法帮助?(请记住,我们已经有一个可以对干净的 IPv4 字符串数组列表进行排序的函数)。