• 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
  • 相关阅读:
    React Children 使用
    Redux 中间件和异步操作
    Redux 核心概念
    React 的setState 异步理解
    JS 中类型和类型转换
    ES6 新增集合----- Set 和Map
    ES6 新增基本数据类型Symbol
    ES6 解构赋值
    ES6 对象增强
    ES6 中的let 和 const
  • 原文地址:https://www.cnblogs.com/superzrx/p/3322051.html
Copyright © 2020-2023  润新知