无重复字符的最长子串

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


解法:

//1. 暴力解法1,比较直观
public static int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) return 0;

        int maxLen = 0;

        // 暴力法:通过保存当前无重复子串来查找
        for (int i = 0; i < s.length(); i++) {
            StringBuilder currentSubstring = new StringBuilder(); // 保存当前无重复子串
            for (int j = i; j < s.length(); j++) {
                char c = s.charAt(j);
                if (currentSubstring.toString().contains(String.valueOf(c))) {
                    // 如果当前子串中已经包含该字符,则停止扩展
                    break;
                }
                currentSubstring.append(c); // 将当前字符加入子串
                maxLen = Math.max(maxLen, currentSubstring.length()); // 更新最大长度
            }
        }

        return maxLen;
    }
//2. 暴力解法2,适用字符集为ASCII
 public static int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) return 0;

        int maxLen = 0;

        // 暴力法:双重循环遍历所有可能的子串
        for (int i = 0; i < s.length(); i++) {
            boolean[] visited = new boolean[256]; // 假设字符集为ASCII
            int j = i;
            for (; j < s.length(); j++) {
                if (visited[s.charAt(j)]) {
                    break; // 如果字符重复,停止内层循环
                }
                visited[s.charAt(j)] = true;
            }
            maxLen = Math.max(maxLen, j - i); // 更新最大长度
        }

        return maxLen;
    }
//3. 滑动窗口法
public static int lengthOfLongestSubstring(String s) {
      if(s == null || s.length() == 0) return 0;

      Set<Character> occ = new HashSet<>();
      int ans=0;
      for(int left=0,right=0;right<s.length();right++){
        while(occ.contains(s.charAt(right))){
            occ.remove(s.charAt(left++));
        }
        occ.add(s.charAt(right));
        ans=Math.max(ans,right-left+1);
      }
      return ans;
    }
posted @   zs-jjboy  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示