Longest Substring Without Repeating Characters

来源:互联网 发布:中国原创服装品牌 知乎 编辑:程序博客网 时间:2024/04/29 02:46
import java.util.Hashtable;//漏写public class Solution {    public int lengthOfLongestSubstring(String s) {        Hashtable<Integer, Character> checkrepeatation = new Hashtable<Integer, Character>();        int i=1, j=0, currlength=1, longestlength=1;        if(s.length() == 0) return 0;//先对两个特殊情况做处理,接下来的循环至少要两个字长度的字符串这样才能进行比较        if(s.length() == 1) return 1;        checkrepeatation.put(0, s.charAt(0));        while( i < s.length())        {            if(!checkrepeatation.contains(s.charAt(i)))//无重复字时            {                currlength++;            }            else//有重复字时            {                if(currlength > longestlength)                 {                    longestlength = currlength;                }                while(s.charAt(j) != s.charAt(i))                {                    checkrepeatation.remove(j);                    j++;                    currlength--;//因为remove,所以currlength也发生相应的变化                }                checkrepeatation.remove(j);                j++;                //currlength--;这句不需要。这个remove是删掉重复字第一次出现的情况。                //因为重复字第二次出现的时候,我并没有增加currlength。            }            checkrepeatation.put(i, s.charAt(i));//这句和下面这句不论什么情况下都必须执行。            i++;//            if (i == s.length() && currlength > longestlength) longestlength = currlength;//字符串走到最后一个字的时候        }        return longestlength;    }}


while( i < s.length())//这段循环我又做了小小的改动                              //,少了之前的else,看上去更干净了        {            if(checkrepeatation.contains(s.charAt(i)))//有重复字时            {                if(currlength > longestlength)                 {                    longestlength = currlength;                }                while(s.charAt(j) != s.charAt(i))                {                    checkrepeatation.remove(j);                    j++;                    currlength--;//因为remove,所以currlength也发生相应的变化                }                checkrepeatation.remove(j);                j++;                currlength--;            }            currlength++;//这句和下面两句不论什么情况下都必须执行。            checkrepeatation.put(i, s.charAt(i));            i++;            if (i == s.length() && currlength > longestlength) longestlength = currlength;//字符串走到最后一个字的时候        }


0 0
原创粉丝点击