首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

最长无重复子串

题目: 思路: 首先明确了这个可以在一次循环中解决即时间复杂度为O(n) 其次,在循环中,我们应能知道起始的位置,然后终止于哪个位置,当碰到终止的时候必然是元素为已经纳入我们统计中的元素。...所以我们是否能用一个容器将元素不断纳入,在纳入过程中判断这个元素是否已经被纳入了进来,最好是有序的方便我们吧从某处的元素之前的那些一次性全部丢弃。...到第二个3时,以后的子串起点start为4,      * 到第二个1时,如果不取最大的start,按start = map.get(arr[end])+1      * 算出起点start为2,显然以起点...start=2,结尾end=1的子串234351有重复的,      * 因此start要取最大的      * 优点:对于方案一,少了一些对于list的截取与搜索的步骤,相对儿研会少一点操作,应该会节约点时间...     * 如[1,2,3,4,5],这时候长度为5,如果下一个数是3,      * 那么最大长度依旧是5,但是数据结构里面的[1,2,3]应当被清除,      * 因为他们不能用于后续统计中,

30410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    最长连续不重复子序列(双指针)

    题意描述 给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式 第一行包含整数n。 第二行包含n个整数(均在0~100000范围内),表示整数序列。...输出格式 共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。...数据范围 1≤n≤100000 输入样例: 5 1 2 2 3 5 输出样例: 3 思路 这道题采用双指针做法,对于一个数字,以该数字为结尾,然后向前计算满足不包含重复数字的最大长度。...使用双指针的好处是,可以让时间复杂度降到O(N)。...我们可以使用一个数组来统计每个数字出现的次数,如果出现的次数大于1,则说明已经有重复的数字出现,记录下当前区间的长度,并且将之前统计的数字清零,然后输出最终答案即可。

    77220

    输出1234无重复三位数

    1.问题 有1,2,3,4四个数字求四个数字能生成多少个互不相同且无重复数字的三位数(不能含有122,133类似) 2.算法描述 先给定一个列表,第一个循环得到第一个数,第二个循环得到第二个数,第三个循环得到第三个数...,用if条件语句进行判断三个数是否重复或者相等,然后再将其转化为三位数,添加到列表中,最后输出该列表。...3.实验结果与讨论 通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。...10+k) list.append(x) print(list) print('能生成%d个'% int(len(list))) 4.结语 本实验探讨了1234能够组成多少无重复的三位数...,涉及for循环、if条件判断语句以及字符串之间的转换,进一步巩固了这些知识点,通过数学方法排列组合得出的结果与该程序运行的结果相一致,证明该方法是有效的。

    62610

    重复的DNA序列

    将DNA序列看作是只包含['A', 'C', 'G', 'T']4个字符的字符串,给一个DNA字符串 ,找到所有长度为10的且出现超过1次的子串。...序列进行整数编码: [‘A’, ‘C’, ‘G’, ‘T’]4个字符分别用[0, 1, 2, 3](二进制形式(00, 01, 10, 11)所表示,故长度 为10的DNA序列可以用20个比特位的整数所表示...1.设置全局整数哈希int g_hash_map[1048576]; 1048576 = 2^20,表示所有的长度为10的 DNA序列。...3.从DNA的第11个字符开始,按顺序遍历各个字符,遇到1个字符即将key右移2位 (去掉最低位),并且将新的DNA字符s[i]转换为整数后,或运算最高位(第19 、20位),g_hash_map[key...4.遍历哈希表g_hash_map,若g_hash_map[i] > 1,将i从低到高位转换为10个字符的DNA 序列,push至结果数组。

    58220

    长度为 K 的无重复字符子串(滑动窗口)

    题目 给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的 数目。...示例 1: 输入:S = "havefunonleetcode", K = 5 输出:6 解释: 这里有 6 个满足题意的子串,分别是: 'havef','avefu','vefun','efuno',...示例 2: 输入:S = "home", K = 5 输出:0 解释: 注意:K 可能会大于 S 的长度。在这种情况下,就无法找到任何长度为 K 的子串。...提示: 1 <= S.length <= 10^4 S 中的所有字符均为小写英文字母 1 <= K <= 10^4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com...set.size() >= K || set.count(S[j])) set.erase(S[i++]);//长度大了,或者包含j字符 set.insert(S[j]);//j无重复了

    1.7K30

    leetcode 3 Longest Substring Without Repeating Characters最长无重复子串

    这个应该是一个典型的动态规划问题:http://bbs.csdn.net/topics/310174805 直观地得到一个思路,表达起来真够难的,直接写代码要更容易 以abcbef这个串为例 用一个数据结构...pos记录每个元素曾出现的下标,初始为-1 从s[0]开始,pos['a'] == -1,说明a还未出现过,令pos['a'] = 0,视为将a"加入当前串",同时长度++ 同理令pos['b'] = ...= -1,说明'b'在前面已经出现过了,此时可得到一个不重复串"abc",刷新当前的最大长度,然后做如下处理: pos[s[0~2]] = -1,亦即将"ab""移出当前串",同时当前长度减去3 重复以上过程...maxLength = max(maxLength, i - start + 1) usedChar[s[i]] = i return maxLength 下面是c语言的版本...: // testlongsetString.cpp : 定义控制台应用程序的入口点。

    46120

    数组中重复的数

    之前有写过 找出数组中只出现一次的数,今天再来看下怎么找出数组中重复出现的数。 有一个长度为 n 的数组,所有的数字都在 0~n-1 的范围,现在要求找出数组中任意一个重复的数字。...思路二: 利用空间换时间的思想,新建一个哈希表,然后遍历数组,每扫描一个元素都去哈希表里查找是否也存在该元素,如果存在,即找到一个重复的数,如果不存在,则将该元素保存到哈希表。...如果 arr[i] 不等于 i,则继续拿 arr[i] 和 arr[arr[i]] 比较,如果 arr[i] 和 arr[arr[i]] 相等,则找到一个重复的数,因为该数字在 i 下标和 arr[i]...交换了之后,再重复上面的比较、交换操作,直到找到一个重复的数。 arr = [4,1,1,3,2,5,5] arr[0] != 0 则比较 arr[0] 和 arr[4] arr[0] !...= 0 则比较 arr[0] 和 arr[1] arr[0] == arr[1] 找到一个重复的数 你可能会问,为什么要交换,交换的目的就是为了把元素放到属于它的位置上,要让这个数组满足 arr[i]

    1.7K20

    最长连续不重复子序列(蓝桥杯每日一题)

    最长连续不重复子序列 给定一个长度为 n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 输入格式 第一行包含整数 n。...第二行包含 n 个整数(均在 0∼105范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。...while(s[a[i]] > 1) // 如果现在出现的这个数字重复了 然后那么【j,i】这一段的所有子序列的连续长度都要减一 { s[a[j]] --; // 这里要注意是j一直是不大于i的...,如果当前这个s[a[i]]>1,代表的是当前这个数字已经重复了,然后对于[i, j]这一段的所有的子序列的连续长度都需要减一。...while(s[a[i]] > 1) // 如果现在出现的这个数字重复了 然后那么【j,i】这一段的所有子序列的连续长度都要减一 {

    7700

    无重复字符的最长字串

    Longest Substring Without Repeating Characters 已知一个字符串,求用该字符串的无重复字符组成的最长子串的长度。...例如: s = "abcabcbb" -> "abc", 3 s = "bbbbb" -> "b", 1 s = "pwwkew" -> "wke", 3 注意 "pwke"是子序列而非子串。...算法设计 利用滑动窗口 双指针维护滑动窗口,整个过程中,使用begin与i维护一个窗口,该窗口中的子串满足题目 条件(无重复的字符),窗口线性向前滑动,整体时间复杂度为O(n)。...1.设置一个记录字符数量的字符哈希,char_map; 2.设置一个记录当前满足条件的最长子串变量word; 3.设置最长满足条件的子串的长度result; 4.设置两个指针(记作指针i与指针begin...否则:begin指针向前移动,更新char_map中的字符数量,直到字符s[i]的数量为1;更新word,将 word赋值为begin与i之间的子串。

    68530

    无重复字符的最长子串

    示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。...示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。...示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 注意,你的答案必须是子串的长度,”pwke” 是一个子序列,不是子串。...拿 abcdefce 举例,我们遍历到第二个c字符的时候,已有的不含有重复字符的子串是 abcdef ,当要把c加入到已有的子串的时候,需要将前面的 abc 删除,那么新的子串为 defc。...| 力扣(LeetCode) 无重复字符的最长子串 | 题解(LeetCode)

    39110
    领券