zoukankan      html  css  js  c++  java
  • [LeetCode]无重复字符的最长子串

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    解题思路

    建立一个List或者Hashset也行,用来存储这个子串.用一个变量(我这里用temp)来存储子串的长度,然后用for循环遍历整个字符串,如果List当中有当前遍历到的字符,则将List当中的这个字符的位置找出来,将这个位置和这个位置之前的字符去除,然后将当前遍历的字符加入进去,如果List的长度大于temp,将List的长度赋值给temp,如果当中没有这个字符,则添加到List里面去,同样更新temp的值

    值得注意:List中的remove方法要从大到小删除,否则容易报越界异常

    代码:

    class Solution {
        public int lengthOfLongestSubstring(String s) {
              if(s.length()==0)
                   return 0;
                List<Character> list = new ArrayList<>();
               int temp = 0;
               char it;
               int loc = 0;
               for(int i = 0;i < s.length();i++) {
                   it = s.charAt(i);
                   if(list.contains(it)) {
                       loc = list.indexOf(it);
                       for(int j = loc; j >= 0;j--) {
                         list.remove(list.get(j));    
                       }
                       list.add(it);
                       if(list.size()>temp) {
                           temp = list.size();
                       }
                   }else {
                    list.add(it);
                    if(list.size()>=temp)
                    temp = list.size();
                }
               }
               return temp;
               
        }
    }
  • 相关阅读:
    WCF 第三章 信道
    WCF 第三章 信道形状
    对单表数据生成insert语句
    WCF 第二章 契约 定义类的层次结构
    WCF 第三章 信道 总结
    Win32类型和.net类型的对应表
    用一条SQL语句实现斐波那契数列
    WCF 第一章 基础 为一个ASMX服务实现一个WCF客户端
    WCF 第二章 契约 数据契约版本
    WCF 第二章 契约 异步访问服务操作
  • 原文地址:https://www.cnblogs.com/Yintianhao/p/9623239.html
Copyright © 2011-2022 走看看