码迷,mamicode.com
首页 > 其他好文 > 详细

Longest Substring Without Repeating Characters

时间:2018-11-28 00:29:14      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:如何   计数   long   ||   string   output   ++   tput   出现   

题意:求一个字符串的最长不含重复字符的子字符串长度;

示例:

input:pwwkw

output:2

intput:dvdf

output:3

 

分析:还是那句话,每分析一个问题的时候都要问自己,自己的大脑是如何找出正确答案的,将自己的分析转化为代码此题便解

题目要求不含重复字符,且是子字符串;

1. 以输入一为例,当数到pw时,重复字符便出现了(字符串长度为2);

2. 于是从第二个w重新计数,到wk时,重复字符再出现(字符串长度为2);

3. 如此到最后一个字符,结果便为2;

提炼出:遇到重复字符,字符长度需重新计数,最终得到这些字符长度的最大值;

如此首先我们需要判定字符是否之前出现过,其次回想一下我们是如何计数的,即当前位置-重复字符出现的那一位置+1,那么我们便需要记录字符出现的位置

那么我们便可以使用一个数组来记录字符出现的位置(数组下标为字符,值为位置index),若未出现过则值为0

如此代码如下:

public int lengthOfLongestSubstring(String s) {
        int[] site = new int[256];
        int left = 0;
        int max = 0;
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (site[ch] == 0 || site[ch] < left) {
                max = Math.max(max, i - left + 1);
            } else {
                left = site[ch];
            }
            site[ch] = i + 1;
        }
        return max;
    }

 

Longest Substring Without Repeating Characters

标签:如何   计数   long   ||   string   output   ++   tput   出现   

原文地址:https://www.cnblogs.com/tz346125264/p/10029806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!