0
点赞
收藏
分享

微信扫一扫

剑指offer JZ48 最长不含重复字符的子字符串

程序猿不脱发2 2022-03-24 阅读 48

代码1

import java.util.*;
import java.lang.Math;
import java.util.Map;

//遇见重复问题,Hash表

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    public int lengthOfLongestSubstring (String s) {
        // write code here
        //key= 每个字符 , value = 对应下标(从0)
        HashMap<Character , Integer> hash = new HashMap<>();
        int res = 0;//结果(最大字串长度)
        int left = 0;//左边界
        //从第一个字符开始遍历。进行处理
        for(int i = 0; i < s.length(); i++){
            //获取第i个位置的字符
            char c = s.charAt(i);
            //判断c是否出现过
            //如果c出现过  “abcabcbb" 此时left = b
            //i = a , l = b; i = b , l  = c; i = c , l = a ;
            //故left或者为原来的值,或者为重复值的下一个位置
            if(hash.containsKey(c)){
                left = Math.max(left , hash.get(c) + 1);
            }
            //加入c与对应的i
            hash.put(c , i);
            //更新res
            res = Math.max(res , i - left + 1);
        } 
        return res;
    }
}

代码2

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *双向
     * 
     * @param s string字符串 
     * @return int整型
     */
    public int lengthOfLongestSubstring (String s) {
        int i = 0;//记录遍历位置
        int flag = 0;//记录字符串的起始位置
        int length = 0;//字符串的长度
        int result = 0;//记录返回的结果
        while(i < s.length()){//从头到尾遍历字符串
            //从flag位置开始查找,判断是否出现重复字符,返回下标pos
            //i从0开始
            int pos = s.indexOf(s.charAt(i) , flag);
            //如果位置i之前存在相同的字符(s.charAt(i))
            if(pos < i){
                //如果字符串长度>结果的长度,更新
                if(length > result){
                    result = length;
                }
                //
                if(result >= s.length() - pos - 1){
                    return result;
                }
                length = i - pos - 1;//遍历字串的长度= 遍历位置-重复位置 -1;
                flag = pos + 1;
            }
            length++;
            i++;
            
        }
        return length;

    }
}
举报

相关推荐

0 条评论