首页 > 其他分享 >最长不重复子串

最长不重复子串

时间:2024-07-19 11:18:01浏览次数:19  
标签:子串 字符 重复 int ans 最长 rk

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

 

class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 哈希集合,记录每个字符是否出现过
        Set<Character> occ = new HashSet<Character>();
        int n = s.length();
        // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
        int rk = -1, ans = 0;
        for (int i = 0; i < n; ++i) {
            if (i != 0) {
                // 左指针向右移动一格,移除一个字符
                occ.remove(s.charAt(i - 1));
            }
            while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
                // 不断地移动右指针
                occ.add(s.charAt(rk + 1));
                ++rk;
            }
            // 第 i 到 rk 个字符是一个极长的无重复字符子串
            ans = Math.max(ans, rk - i + 1);
        }
        return ans;
    }
}

标签:子串,字符,重复,int,ans,最长,rk
From: https://www.cnblogs.com/zhengbiyu/p/18311127

相关文章

  • 【算法】删除有序链表中的重复元素、保留重复节点的一个
    1.概述存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每个元素只出现一次。返回同样按升序排列的结果链表。本问题和【算法】删除有序链表中的重复元素、不保留重复节点很类似,但是思考起来稍微简单些,建议看完这个,看链接的这个吧。2.......
  • iphone如何删除重复照片
    iPhone以其出色的拍摄性能和用户体验深受全球用户欢迎。随着我们使用iPhone记录生活的点点滴滴,不可避免地会在相册中积累大量照片。这其中不乏重复拍摄的照片,这些重复的照片不仅占用宝贵的存储空间,也让我们在查找特定照片时变得更加困难。因此,iphone如何删除重复照片困扰着广大......
  • [leetcode] 字符串 重复的子字符串
    题目:给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。代码:思路1(暴力算法):省略思路2(移动匹配):两个重复的字符串,肯定能组成一个新的s代码boolrepeatedSubstringPattern(strings){strings1=s+s;s1.erase(s1.begin());......
  • 2024-07-17:用go语言,给定一个整数数组nums, 我们可以重复执行以下操作: 选择数组中的前两
    2024-07-17:用go语言,给定一个整数数组nums,我们可以重复执行以下操作:选择数组中的前两个元素并删除它们,每次操作得到的分数是被删除元素的和。在保持所有操作的分数相同的前提下,请计算最多能执行多少次操作。返回可以进行的最大操作次数。输入:nums=[3,2,1,4,5]。输出:2。......
  • 力扣刷题笔记-删除数组中的重复元素
    纠结要不要离开杭州删除数组中的重复元素思想双指针/快慢指针只有当两个元素不相等的时候才发生复制和p指针向后移动如果两个指针指向的元素相等,则q指针向后移动p和q不相邻的情况下才发生复制和替换,如果相邻,只是简单的q指针向后移动p指针是慢指针,q指针是快指针,当p和q指向......
  • 表单重复提交解决办法
    1.编写RepeatSubmit注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceRepeatSubmit{}2.注册RepeatSubmitInterceptor继承HandlerInterceptorAdapterpublicabstractclassRepeatSubmitInterceptorextendsHandlerInterce......
  • 代码随想录算法训练营第九天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28.
    151.翻转字符串里的单词题目:.-力扣(LeetCode)思路:用快慢双指针重置空格,先整体翻转再局部翻转代码:classSolution{public:voidremoveSpace(string&s){intslow=0;for(intfast=0;fast<s.size();fast++){if(slow!=0&&s[fast]!='')......
  • 安卓避免点击事件重复触发
    背景:在安卓开发过程中,点击事件的处理是无可避免的,我们希望的是,用户点击一次,我们实现对应的一次点击事件,但是用户的操作是不可预估的,有时候往往会出现连点的情况,而我们又不希望同一事件短时间内重复触发。实现:publicabstractclassOnSingleClickListenerimplementsVie......
  • 每格内容按相邻格数值重复多次
    表格有两列,其中B列是数值。AB1flower42apple6需要将A格的内容按B格的数值重复多次,并拼成一列。E1flower2flower3flower4flower5apple6apple7apple8apple9apple10apple使用SPLXLL=spl("=?.conj(~2*[~1])",A1:B2)函数conj合并序列的成员,~2表示当前成员的第2个子......
  • Acwin-3692. 最长连续公共子序列——待续
    1.题目输入两个字符串s1,s2。输出最长连续公共子串长度和最长连续公共子串。输入格式一行,两个字符串s1,s2,用空格隔开。输出格式第一行输出最长连续公共子串的长度第二行输出最长连续公共子串。如果不唯一,则输出s1中的最后一个。数据范围1≤|s1|,|s2|≤100数据保证......