题解 | #最长不含重复字符的子字符串#

最长不含重复字符的子字符串

http://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7

解题思路

感觉这道题是动态规划和hashmap 的结合题。用hashmap 存储不重复字符及其出现的位置。dp[i] 表示以i 结尾的最长不含重复字符的子字符长度。i 位置的字符不在hashmap 中,动态转移方程:dp[i]=dp[i-1]+1,并将其加入到hashmap中,如果在i为的字符在hashmap 中,则获取其的位置pos。dp[i]=i-pos。 注意在第二种情况下,需要将hashmap进行清空。将pos到i 的位置的字符加入到hashmap中 。这是我在debug时候才发现的问题。

代码实现

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
   public static int lengthOfLongestSubstring (String s) {

        //这个方法有问题
        int lens=s.length();
        if(lens<1){
            return 0;
        }
        //存储中间结果
        int[] dp = new int[lens];

        // 定义一个hashmap 存储不重复字符及其出现的位置
        HashMap<Character, Integer> hashmap = new HashMap<>();
        dp[0]=1;
        hashmap.put(s.charAt(0),0);

        for(int i=1;i<lens;i++){

            //hashmap 中没有
            if(!hashmap.containsKey(s.charAt(i))){
                hashmap.put(s.charAt(i),i);
                dp[i]=dp[i-1]+1;
            }else{
                // hashmap 中有, 获取位置
                int pos = hashmap.get(s.charAt(i));
                dp[i]=i-pos;
                //更新当前字符的位置
                //要将hashmap 中pos 到i 的char 放入hashmap 中 debug 时候才发现问题

                hashmap.clear();
                for(int j=pos+1;j<=i;j++){
                    hashmap.put(s.charAt(j),j);
                }
            }
        }
        int result=Integer.MIN_VALUE;
        for(int i=0;i<lens;i++){
            if(dp[i]>result){
                result=dp[i];
            }
        }
        return result;

    }
    
}
全部评论

相关推荐

09-24 18:30
已编辑
长春工业大学 产品经理
小肥罗:HR就是好人的缩写哈哈哈哈
点赞 评论 收藏
分享
10-29 15:51
嘉应学院 Java
后端转测开第一人:你把简历的学历改成北京交通大学 去海投1000份发现基本还是没面试
点赞 评论 收藏
分享
11-17 11:15
门头沟学院 Java
金山办公终于发offer了,但薪资和平台都不如已有的offer打算拒了,A不了薪资,不满意直接拒了,留给需要的人嘿嘿嘿时间线:10.14线下一面&nbsp;,10.23线上二面,下午发测评,11月1日HR面,11月14日电话谈薪,11月17日直接发offer
star__plat...:好兄弟干的好啊,解气。金山第一次笔难度高的离谱,第二次简单的离谱全A了,用人部门筛选中估计最后还是要挂我,就这今早智联招聘还给我发信息让我投
offer帮选
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务