首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    给定一个字符串,找到包含该字符串所有字符的最短子串

    其思路是这样的 首先遍历一次字符串,求出字符串不同字符的数目 为每一个字符保存一个列表,记录该字符在字符串中出现的索引 记录待求字符串的首字母的索引start(初始值为0),结束索引end(初始值为length...-1) 记录可能的待求字符串的首字母的索引值为pStart(初始值为0) 重新遍历字符串,当前索引为index 更新没有遍历的字符的数目,更新当前字符对应的索引列表。...如果pStart处字符对应的列表长度大于1,则从索引列表中移出pStart,并将pStart加1,并重复该过程 如果index处字符是第一次出现,则将剩余字符数目减一 如果剩余字符数目为0时,且子字符串...可以在纸上画画看 class Solution { String getShortestSubString(String str) { if (str == null || str.length...() 1) { return str; } // 记录目标字符串的起始索引 int start = 0, end = str.length() - 1;

    1K10

    leetcode算法题js版

    如果不是为了更好的工作机会,我才懒得刷。 ? 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。...无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 *最长子串 *的长度。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。...result = (h + l) / 2 } return result; }; 5.最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。

    1.1K30

    前端从零开始刷leetCode-持续更新

    方法论及算法索引 使用一次循环或者减少循环提升执行效率,举例:两数之和,无重复字符的最长子串 以空间换时间,使用缓存机制可以大幅度提升执行效率,有损内存,举例:两数之和,无重复字符的最长子串 言归正传...两数之和 给定一个整数数组 nums 和一个整数目标值 target请,你在该数组中找出和为目标值 target的那两个整数并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。...无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。...示例 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...==0){ return 0 }else{ var array = s.split("") var num = 0 if(array.length == 1){

    1.1K20

    BAT面试算法进阶(4)- 无重复字符的最长子串(滑动法优化+ASCII码法)

    算法题解读 题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度 解读Example 给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3 给定"bbbbb",最长子串就是..."b",长度就是1 给定pwwkew,最长子串就是"wke",长度为3, ==注意,==必须是一个子串."...实际上我们可以如果采用进一步优化,可以达到只需要N次即可计算成功.我们可以定义字符到索引映射.而不是使用集合来判断这个字符的存在与否.当遇到重复的字符时,我们即可跳过该滑动窗口....也可以理解为,如果s[j]在[i,j)的范围内有与j'重复的字符.我们不需要逐渐增加i.而是直接跳过[i,j']范围内的所有元素.并将i变成为j'+1就可以做到....代码实现 java code 使用ASCII 128码 思路 字符串,其实由字符构成.而字符则可以用ASC码来替代.如此,我们可以用整数数组作为直接访问表来替换Map.

    40210

    字符串最长子串难?滑动窗口拯救你

    “ 别不信,求字符串最长子串用滑动窗口真不难。” 题目:leetcode 3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。...滑动窗口 滑动窗口就是通过不断调整子序列的 start 和 end 位置,从而获取满足要求的结果。...子串数组的右边界 right 向右移,拓展子串长度,以寻找最长子串。 ?...将字符 s[right + 1] 跟子串 s[left...right] 中的每个字符进行比较,如果都不同,则将字符 s[right + 1] 也纳入到子串中。 ?...如果字符 s[right + 1] 跟子串 s[left...right] 中的某个字符相同,则将子串数组的左边界 left 右移,刨除 s[left...right] 中的那个重复的字符; ?

    1.1K40

    BAT面试算法进阶(4)- 无重复字符的最长子串(滑动法优化+ASCII码法)

    二.算法题解读 题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度 解读Example 给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3 给定"bbbbb",...最长子串就是"b",长度就是1 给定pwwkew,最长子串就是"wke",长度为3, 注意,必须是一个子串."...实际上我们可以如果采用进一步优化,可以达到只需要N次即可计算成功.我们可以定义字符到索引映射.而不是使用集合来判断这个字符的存在与否.当遇到重复的字符时,我们即可跳过该滑动窗口....也可以理解为,如果s[j]在[i,j)的范围内有与j'重复的字符.我们不需要逐渐增加i.而是直接跳过[i,j']范围内的所有元素.并将i变成为j'+1就可以做到....四.代码实现 Java code 五.使用ASCII 128码 思路 字符串,其实由字符构成.而字符则可以用ASC码来替代.如此,我们可以用整数数组作为直接访问表来替换Map.

    38320

    leetcode必备算法:聊聊滑动窗口

    滑动窗口可以解决哪些问题 哪些leetcode的题目,我们可以用滑动窗口去解决呢? 一般情况,子串问题,如什么最小覆盖子串、长度最小的子数组等等,都可以考虑使用滑动窗口算法。...比较经典的滑动窗口题目有这些: 无重复字符的最长子串 最小覆盖子串 串联所有单词的子串 至多包含两个不同字符的最长子串 长度最小的子数组 滑动窗口最大值 字符串的排列 最小窗口子序列 都是leetcode...题目:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。...示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...题目:给你一个字符串S、一个字符串T。返回S中涵盖T所有字符的最小子串。如果S中不存在涵盖T所有字符的子串,则返回空字符串 "" 。

    2K40

    2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs和strs所有的字符随意去排列能组

    2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的,如果i 所有的字符随意去排列能组成回文串,那么说(i,j)叫做一个互补对(complementary...strs长度 个字符串长度 所有字符串总长度 使用暴力方法,时间复杂度为 O(N^2*M),其中,N 表示字符串数组的长度,M 表示单个字符串的平均长度。空间复杂度为 O(1)。...如果所有字符都出现了偶数次,或只有一个字符出现了奇数次,则可以组成回文串,返回 true。算法二基于状态压缩的哈希表方法,通常也称为“状态压缩 + 哈希表”算法。...该算法可以有效地避免枚举所有可能的字符串排列组合,从而实现了较优的时间复杂度。该算法时间复杂度为 O(N*M),其中,N 表示字符串数组的长度,M 表示单个字符串的平均长度。空间复杂度为 O(N)。

    69550

    面试官,你再问我滑动窗口问题试试?我有解题模板,不怕!

    题目问法大致有这几种: 给两个字符串,一长一短,问其中短的是否在长的中满足一定的条件存在,例如: 求长的的最短子串,该子串必须涵盖短的的所有字符 短的的 anagram 在长的中出现的所有位置 … 给一个字符串或者数组...,问这个字符串的子串或者子数组是否满足一定的条件,例如: 含有少于 k 个不同字符的最长子串 所有字符都只出现一次的最长子串 … 除此之外,还有一些其他的问法,但是不变的是,这类题目脱离不开主串(主数组...题目描述 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。...题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。...题目描述 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。

    1.7K40

    BAT面试算法进阶(3)- 无重复字符的最长子串(滑动窗口法)

    算法题解读 题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度 解读Example 给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3 给定"bbbbb",最长子串就是..."b",长度就是1 给定pwwkew,最长子串就是"wke",长度为3, ==注意,==必须是一个子串."...滑动窗口 是指的是数组/字符串问题的常用抽象概念.窗口通常在数组/字符串中由开始和结束的索引定义的一系列元素的集合.即可[i,j)(左闭,右开).而滑动窗口是可以将2个边界向某一个方向"滑动"的窗口.例如...s[ij]; 由于在C语言中是没有集合这一个概念的.所以我们使用java来实现.我们可以通过HashSet作为活动窗口.那我们只需要用O(1)的时间来完成对字符是否在当前子字符串的检查....算法面试系列文章: BAT面试算法进阶(1)--两数之和 BAT面试算法进阶(2)- 无重复字符的最长子串(暴力法) BAT面试算法进阶(4)- 无重复字符的最长子串(滑动法优化+ASCII码法) BAT

    49720

    BAT面试算法进阶(2)- 无重复字符的最长子串(暴力法)

    算法题解读 题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度 解读Example 给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3 给定"bbbbb",最长子串就是..."b",长度就是1 给定pwwkew,最长子串就是"wke",长度为3, ==注意,==必须是一个子串."...pwke",是子序列,而不是子串 暴力解决方案 3.1 思路 逐个检查所有的子字符串,看它是否不含有重复字符 3.2 算法 为了枚举给定字符串的所有子字符串,我们需要枚举它们开始和结束的索引,假如开始和结束的索引分别是...i和j.那么我们有0使用i从0到n-1以及j从i+1到n这2个嵌套循环.我们就可以遍历出a的所有子字符串. 3.3 复杂的分析 时间复杂度:o(n3); 空间复杂度:o(min...(5)- 最长回文子串(方法一) BAT面试算法进阶(6)- BAT面试算法进阶(6)-最长回文子串(方法二) BAT面试算法进阶(7)- 反转整数 BAT面试算法进阶(8)- 删除排序数组中的重复项

    40330
    领券