java - 在列表中查找回文
问题描述
假设我们有一个整数列表,例如:
L = [13,13,4,13,4,2]
我想找到所有回文的集合,其中每个回文都是L
包含连续整数的子列表。对于上面的列表,这将是:
S = {[13], [4], [2], [13,13], [13,4,13], [4,13,4]}
因为 的倒数L
是L' = [2,4,13,4,13,13]
,并且 的每个元素都以正确的顺序S
出现。L'
我怎样才能找到所有回文的集合?我幼稚的方法是检查幂集的每个元素是否L
出现在 中L'
,但这是低效的,我相信有更好的解决方案。
解决方案
我认为我的解决方案与MC Emperor的解决方案非常相似,但我专注于不创建像列表这样的临时对象。
left
我使用和索引选择给定数组的子数组right
并检查它的回文。
public static Set<List<Integer>> findAllPalindromes(int[] arr) {
Set<List<Integer>> res = new LinkedHashSet<>();
for (int length = 1; length < arr.length; length++)
for (int left = 0, right = left + length - 1; right < arr.length; left++, right++)
if (isPalindrome(arr, left, right))
res.add(sublist(arr, left, right));
return res;
}
此方法检查是否给定子数组回文:
private static boolean isPalindrome(int[] arr, int left, int right) {
for (; left < right; left++, right--)
if (arr[left] != arr[right])
return false;
return true;
}
此方法为给定的子数组创建单独的列表:
private static List<Integer> sublist(int[] arr, int left, int right) {
List<Integer> res = new ArrayList<>(right - left);
for (; left <= right; left++)
res.add(arr[left]);
return res;
}
推荐阅读
- python - 没有值从 txt 文件写入 csv 文件
- python - 更改在终端 MacOs Catalina 中使用的 python
- python - 按索引对熊猫数据框进行排序
- python - sklearn.preprocessing.scale 是如何工作的?
- c++ - 如何从具有最大值的序列中找到起始数字
- c# - 异步和等待,任务和线程之间的区别?
- html - 在按钮背景中对齐图像
- android - 我想一次只在 1 个片段上处理收到的消息
- python - 如何总结完整的预测评级数组和实际已知评级之间的差异(python)
- flutter - Streambuilder没有在颤动的对话框内被调用