algorithm - 计算子序列、子集和子字符串的正确方法是什么?
问题描述
我经常在编码面试中遇到以下术语。
给定一个数组或字符串,找到子数组子序列子字符串
他们有什么区别?例如,我看到一个整数数组可以拆分为
n*(n+1)/2
子数组。它们也成为子集吗?子数组应该是连续的吗?对于计算字符串的子序列,为什么要使用
2^str_length - 1
在网上搜索后,我最终得到了这个链接 https://www.geeksforgeeks.org/subarraysubstring-vs-subsequence-and-programs-to-generate-them/
但是我仍然感到模棱两可,因为调用数组/字符串的一部分的通用术语是什么?以及如何计算它们?
解决方案
一般来说,数组和字符串都是子序列。“序列”部分表明元素的顺序在某种程度上很重要。“子串”通常是连续的;“子阵列”和“子序列”不清楚。如果您在面试中并且不确定解释,那么您的第一项工作就是询问。有时,工作面试的一部分是确保您能够发现并解决模棱两可的问题。
问题更新后更新
我发现引用的页面很清楚。首先,请注意字符串和数组都是序列的特定类型。
- 子序列是通用术语:原始序列的元素以与原始序列相同的顺序出现,但不一定是连续的。例如,给定序列“abcdefg”,我们有子序列“a”、“ag”、bce”等。
- 重复或不在原始顺序中的元素将包括“ga”、“bb”、bcfe”等。这些都不是子序列。
- “子集”是一个单独的类型。在一个集合中,重复的元素不存在,顺序也无关紧要。
这能解决你的问题吗?
推荐阅读
- python - 将时间增量数组转换为瞬间数组
- azure-data-explorer - Kusto.Cloud.Platform.Utils.UtilsArgumentException 无效的 Kusto 连接方案:'' 使用 API 'Query' 时
- audio - 制作音频均衡器视频
- elixir - Elixir 中的竞争条件测试
- java - 如何在用户完成之前询问用户字符串输入?
- excel - Excel运动模板排名表
- reactjs - redux-thunk 是如何工作的?
- java - 无法计算折扣
- python - 在kali linux python3-pip中面临问题
- java - 用java反射覆盖复杂对象实例中的值