zoukankan      html  css  js  c++  java
  • 关于力扣第三题 ---无重复字符的最长子串

    题目描述:

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    解法1:暴力解法

     1 var lengthOfLongestSubstring = function(s) {
     2     var n = s.length;
     3     var maxlen=0;
     4     var len = 0;
     5     var str = '';
     6     
     7     if(s===''){
     8         return 0;
     9     }
    10     
    11     for(var i=0;maxlen<n-i+1;i++){
    12         for(var j=i;j<n;j++){           
    13             str+=s[j];
    14             len++;
    15             if(j+1===n){
    16                 if(maxlen<len){
    17                     maxlen=len
    18                 }
    19                 len = 0;
    20                 str = '';
    21                 break;
    22             }
    23             if(str.indexOf(s[j+1]) !== -1){
    24                 if(maxlen<len){
    25                     maxlen=len
    26                 }
    27                 len = 0;
    28                 str = '';
    29                 break;
    30             }   
    31         }   
    32     }    
    33     return maxlen;
    34 }

    解法2:

     1 let lengthOfLongestSubstring = function(s){
     2     s = s || "";
     3     let checkCharMap = {};
     4     
     5     let currentBeginIndex = 0;
     6 
     7     let currentMax = 0;
     8     for(let i=0; i<s.length; i++){
     9         if(s.length - currentBeginIndex <= currentMax){
    10             break;
    11         }
    12         
    13         let itemChar = s[i];
    14 
    15         if(checkCharMap[itemChar] === undefined){
    16             checkCharMap[itemChar] = i;
    17         }
    18 
    19         let lastIndex = checkCharMap[itemChar];
    20         checkCharMap[itemChar] = i;
    21         if(lastIndex >= currentBeginIndex && lastIndex != i){
    22             currentBeginIndex = lastIndex + 1;
    23         }
    24 
    25         if(i - currentBeginIndex + 1 > currentMax){
    26             currentMax = i - currentBeginIndex + 1;
    27         }
    28     }
    29 
    30     return currentMax;
    31 }

    解法3:

     1 var lengthOfLongestSubstring = function(s) { 
     2     var len = s.length; 
     3     var arr=[],num=0,i=0,j=0;
     4     for(;j<len;j++){ 
     5         if(arr.indexOf(s[j])!==-1){
     6             i = arr.lastIndexOf(s[j])+1;
     7             arr.splice(0,i); 
     8         } 
     9         num = Math.max(num, arr.length+1); 
    10         arr.push(s[j]); 
    11     } 
    12     return num; 
    13 };

    解法4:滑动优化窗口

     1 var lengthOfLongestSubstring = function(s) { 
     2     const n = s.length;
     3     let tempStr = "";
     4     let ans = 0;
     5     let i = 0;
     6     let j = 0;
     7     while (j<n) {
     8         if (tempStr.includes(s[j])) {
     9             i = tempStr.lastIndexOf(s[j]) + 1
    10             tempStr = tempStr.slice(i)
    11         }
    12         ans = Math.max(ans, tempStr.length + 1)
    13         tempStr += s[j++]
    14     }
    15     
    16     return ans;
    17 };

    解法5:简单轻便

     1 var lengthOfLongestSubstring = function(s) {
     2     var ls = s.charAt(0);
     3     var num = ls.length;
     4     for(i=1;i <= s.length;i++){
     5         let index = -1;
     6         index = ls.indexOf(s.charAt(i))
     7         if(index > -1){
     8             num = ls.length > num ? ls.length : num;
     9             ls = ls.substr(index+1,s.length);
    10         }
    11         ls += s.charAt(i);
    12     }
    13     return num;
    14 };
  • 相关阅读:
    Java学习——字符串
    Java学习——字符串
    【费马小定理+快速幂取模】ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies
    【费马小定理+快速幂取模】ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies
    Java学习——Eclipse下载,java配置,新建,输入输出
    Java学习——Eclipse下载,java配置,新建,输入输出
    python使用scikit-learn计算TF-IDF
    scanf,printf函数细节
    UVA 4855 Hyper Box
    poj 2001 Shortest Prefixes(字典树)
  • 原文地址:https://www.cnblogs.com/myfate/p/10443623.html
Copyright © 2011-2022 走看看