leetcode - 3、Longest Substring Without Repeating Characters

题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/

题目要求:求出最长的不重复子串

思路:

1、采用map,遍历字符串,将每个字符put进map
2、如果长度为1,直接输出1
3、end-begin+1(注意+1)
end为当前遍历到的位置,
begin为重复位置+1
4、在遍历字符串的时候,判断当前字符是否存在resultMap.containsKey(key),
如果不存在,将其put进map,并维护end-begin+1
如果存在,重置begin位置,计算长度
(begin的位置判断:如果当前begin位置index比重复位置大,需要begin==当前begin位置index,否则等于重复位置)
begin = begin > (resultMap.get(key)+1) ? begin : (resultMap.get(key)+1)
长度维护:
result = result > (end-begin+1) ? result : (end-begin+1);

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Solution {
    public int lengthOfLongestSubstring(String s) {
        char str[] = s.toCharArray();
        int len = str.length;
        if(len == 1 ){
            return 1;
        }else {
            //        int sum = 0;
            int result = 0;
            int begin = 0;
            int end = 0;
            Map<String,Integer> resultMap = new HashMap<String, Integer>();
            for(int i = 0; i<len; i++){
                String key = str[i]+"";
                end = i;
                //未重复
                if(!resultMap.containsKey(key)){
                    resultMap.put(key,i);
                    result = result > (end-begin+1) ? result : (end-begin+1);
                }else { //遇到重复
//                resultMap.clear();
                    begin = begin > (resultMap.get(key)+1) ? begin : (resultMap.get(key)+1);
                    result = result > (end-begin+1) ? result : (end-begin+1);
                    resultMap.put(key,i);
                }
            }
//            System.out.println(result);
            return result;
        }
    }
}

  

posted @   非我非非我  阅读(111)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件
历史上的今天:
2015-09-17 hdoj 1827 Summer Holiday【强连通分量&&缩点】
点击右上角即可分享
微信分享提示