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
  • 相关阅读:
    【转】Visual studio 快捷键大全
    C++ 中的权限控制
    论C++11 中vector的N种遍历方法
    c++ 模板仿函数初探
    OBS (open boardcast server)结构分析
    OpenCV学习笔记:opencv_core模块
    [转]C++ new操作符详解
    进程已经被attach debug,如何解除其debug权限?
    dll 在进程中怎么区分的
    树状数组学习笔记
  • 原文地址:https://www.cnblogs.com/superzrx/p/3322051.html
Copyright © 2011-2022 走看看