您的位置:首页 > 其它

LeetCode------Longest Substring Without Repeating Characters

2016-04-16 21:31 393 查看
题目简介

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given 
"abcabcbb"
, the answer is 
"abc"
,
which the length is 3.

Given 
"bbbbb"
, the answer is 
"b"
,
with the length of 1.

Given 
"pwwkew"
, the answer is 
"wke"
,
with the length of 3. Note that the answer must be a substring, 
"pwke"
 is
a subsequence and not a substring.


自己的解法

[java]

public
class Solution {

    public int lengthOfLongestSubstring(String s) {

            int add=0;

            int count=0;

            StringBuffer S=new StringBuffer(s);

            while(s.length()!=1){

                 char a=s.charAt(0);

                 int i=0;

                 while(i!=-1){

                      if(i==s.length()-1){

                         count--;

                         break;

                      }

                      S.deleteCharAt(i);

                      i=s.indexOf(a,i+1);

                 }

                 s=S.toString();

                 count++;

            }

            return count;

    }

}

我的思路是,找一个字符删掉字符串中所有与它相同的字符。count++,直到最后字符串的长度为0,返回count即可。但是在oj上始终说我deleteCharAt函数有问题,最后发现是deleteCharAt函数不能删除最后一位,但后来加上了判断还是有问题。最后还是放弃了,感觉自己还是对deleteCharAt函数不太了解。




Hot解法

[java]

public
class Solution {

   public int lengthOfLongestSubstring(String s) {

        if (s.length()==0) return 0;

        HashMap<Character, Integer> map = new HashMap<Character, Integer>();

        int max=0;

        for (int i=0, j=0; i<s.length(); ++i){

            if (map.containsKey(s.charAt(i))){

                j = Math.max(j,map.get(s.charAt(i))+1);

            }

            map.put(s.charAt(i),i);

            max = Math.max(max,i-j+1);

        }

        return max;

    }

}


看了很长时间,加上了自己的一些调试,总算弄懂了hot解法的代码,但是还不是很理解,只是停留在了能看懂的层面,知道了HashMap和Map的区别,Map是一个接口,HashMap是Map的一个实现类,它实现了所有的Map的方法。目前只是能看懂,但我觉得随着做的题目的增加和对Map的更多的使用,日后应该会理解的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息