zoukankan      html  css  js  c++  java
  • leetCode 刷题 无重复最长字符串

    原题

     给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
    *
    * 示例 1:
    *
    * 输入: "abcabcbb"
    * 输出: 3
    * 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    * 示例 2:
    *
    * 输入: "bbbbb"
    * 输出: 1
    * 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    * 示例 3:
    *
    * 输入: "pwwkew"
    * 输出: 3
    * 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    *   请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    在原题的基础上我增加了输出符合要求的字符
     1 public class Lswrc {
     2     public static  int solution1(String str){
     3         if(str==null||"".equals(str.trim())){
     4             throw new RuntimeException("字符串长度为0");
     5         }
     6         String[] split = str.split("");//得到拆分数组
     7         List<String> content = new ArrayList<String>();
     8         List<List<String>> list = new ArrayList<List<String>>(16);
     9         for (int i = 0; i <str.length() ; i++) {
    10           //不包含则添加 //若有重复字符串则进行处理
    11             if(!content.contains(split[i])){
    12                 content.add(split[i]);
    13             }else {
    14                //将之前的字符放到结果集中,如果结果集为空则直接加,不为空判断当前数组长度不小于则添加,大于则清空之前的结果集数据
    15                 List<String> temp0 =  new ArrayList<String>(content);
    16                 if(list.size()==0){
    17                     list.add(temp0);
    18                 }else {
    19                     if(list.get(0).size()<=temp0.size()){
    20                         if(list.get(0).size()<temp0.size()){
    21                             list.clear();
    22                         }
    23                         list.add(temp0);
    24                     }
    25                 }
    26                 //"pwwkewwdeqasdasdwqeqewqewqeqw"
    27                 //删除包含重复字符的之前的字符,并添当前重复字符
    28                 int index = content.indexOf(split[i]);
    29                 for (int j = 0; j <=index ; j++) {
    30                     content.remove(0);
    31                 }
    32                 content.add(split[i]);
    33                 //若此时的长度满足结果集条件则加入结果集
    34                 List<String> temp =  new ArrayList<String>(content);
    35                     if(list.get(0).size()<=temp.size()){
    36                         if(list.get(0).size()<temp.size()){
    37                             list.clear();
    38                         }
    39                         list.add(temp);
    40                     }
    41             }
    42         }
    43         System.out.println(list);
    44         return list.get(0).size();
    45     }
    46 
    47     public static void main(String[] args) {
    48         System.out.println(solution1("abcabcbbefewffacsdasdqwdacaca"));
    49     }
    50 }

         注意点:1.删除index之前的集合数据

                       2.结果集必须在当前数据处理前后都添加一次,否则或导致最后一次处理的结果未被保存到结果集

    遇事犹豫不决时,须持虎狼之心,行仁义之事
  • 相关阅读:
    Pytest之自定义mark
    Pytest之skip、skipif、xfail
    Pytest之fixture
    Pytest之断言
    Pytest之收集用例及命令行参数
    Pytest之基本介绍
    Python接口自动化之动态数据处理
    Python接口自动化之接口依赖
    关于激光纵模、横模与锁模技术的理解 Label:Research
    如何快速设计一个FIR滤波器 Label:Research
  • 原文地址:https://www.cnblogs.com/fmlyzp/p/11556650.html
Copyright © 2011-2022 走看看