zoukankan      html  css  js  c++  java
  • LeetCode-Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

    简单来说就是维护一个没有重复字符的窗口,确定起点后先向后拓展终点,直到重复再向后移动起点直到无重复。

    class Solution {
    public:
        bool check(int*a,int n){
            for(int i=0;i<n;i++){
                if(a[i]>1)return false;
            }
            return true;
        }
        int lengthOfLongestSubstring(string s) 
        {
            if(s.length()<=0)return 0;
            int* all=new int[26];
            for(int i=0;i<26;i++)all[i]=0;
            int maxLength=1;
            int start=0;
            int end=0;
            all[s[start]-'a']++;
            
            while(true)
            {
                if(check(all,26))
                {
                    if(end-start+1>maxLength)
                    {
                        maxLength=end-start+1;
                    }   
                    end++;
                    if(end>=s.length())break;
                    all[s[end]-'a']++;
                }
                else
                {
                    all[s[start]-'a']--;
                    start++;
                }
                
            }
            delete all;
            return maxLength;
        }
    };
    
    public class Solution {
      public int lengthOfLongestSubstring(String s) {
            // Note: The Solution object is instantiated only once and is reused by
            // each test case.
            if (s.length() == 0)
                return 0;
            boolean[] count = new boolean[256];
            Arrays.fill(count, false);
            int start = 0, end = 0;
            int maxLen = 0;
            boolean flag = true;
            count[(int) s.charAt(0)] = true;
            end++;
            while (true) {
                if (end < s.length()) {
                    if (count[(int) s.charAt(end)]) {
                        if (end - start > maxLen)
                            maxLen = end - start;
                        while (count[(int) s.charAt(end)]) {
                            count[(int) s.charAt(start)] = false;
                            start++;
                        }
                    } else {
                        count[(int) s.charAt(end)] = true;
                        end++;
                    }
                } else {
                    if (end - start > maxLen)
                        maxLen = end - start;
                    break;
                }
            }
            return maxLen;
        }
    }
    Java
  • 相关阅读:
    自定义行操作事件——DataGrid系列
    分页样式——DataGrid系列
    勾选批量操作——DataGrid系列
    快速排序的基本实现
    2021/06--09学习情况一些总结和反思
    IntegerCache的一些联想
    Hibernate, Jpa, Spring Data Jpa的关系与区别
    Springboot+Hibernate+Transactional中save提交引发的db异常无法捕获
    一个涉及多系统多步骤的业务需求设计与思考
    Use SQL to query dataverse
  • 原文地址:https://www.cnblogs.com/superzrx/p/3322051.html
Copyright © 2011-2022 走看看