找出字符串的最长不重复子串,输出长度

import java.util.HashMap;
import java.util.Map;

/*

  • 找出字符串的最长不重复子串,输出长度

  • /
    public class FaceFive {
    /

    • 该题,可以用hash解

    • 字符的个数是有限的255

    • 所以采用数组255来做字符保存

    • 从头到尾,扫描,用期间最长的长度作为跨度,一步一步推进 maxlen=j-i

    • 与之前的max最比较得出最大的数

    • */
      private static int getResult(String value){
      if(value==null||value.length()==0)
      return 0;
      char[] s=value.toCharArray();
      int i = 0, j = 0;
      int n = s.length;
      int maxLen = -1;
      boolean exists[] = new boolean[256];

      while (j < n)
      {
      if (exists[s[j]])
      {
      maxLen = Math.max(maxLen, j - i);
      System.out.println(j+"-"+i+"="+(j-i));
      while (s[i] != s[j])//遇到相同的字符则直接退出
      {
      exists[s[i]] = false;//在当前最大的长度区间内不同字符设置为false
      i++;
      }
      i++;//代表跳过一个位置
      }
      else
      {
      exists[s[j]] = true;
      }
      j++;
      }
      /*

      • 考虑到所有字符都不同且长度<255的情况
        maxLen并没有进入while循环中而没有更新
        要在最后更新一次
      • */
        maxLen = Math.max(maxLen, j - i);

      return maxLen;
      }

    public static void main(String[] args) {
    String value=new String("abaaabcdefdde");
    System.out.println(" "+getResult(value));
    }
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,793评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,449评论 0 6
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,187评论 0 41
  • 不知从何时开始,剩女的年龄界限被不断前置。吃一次生日蛋糕被介绍男友的次数就增加一次,朋友圈里也不能幸免,越来越多的...
    鱼婂婂阅读 498评论 2 6