当前位置: 首页 > article >正文

无重复最长字符串(最长无重复子字符串),剑指offer,力扣

目录

原题:

力扣地址:

我们直接看题解吧:

解题方法:

难度分析:

难度算中下吧,这个总体不算很难,而且滑动窗口,以及哈希都比较常见

审题目+事例+提示:

解题思路(滑动窗口+哈希):

代码实现:


原题:

1.题目:最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中值包含‘a’-‘z’的字符。例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4。

力扣地址:

LCR 167. 招式拆解 I - 力扣(LeetCode)

难度:中等

今天刷无重复最长字符串(最长无重复子字符串),大家有兴趣可以点上看看题目要求,试着做一下。

我们直接看题解吧:

解题方法:

这道题比较明显的看出适合用滑动窗口(双指针)题目,同时+哈希(效率更高)

难度分析:

难度算中下吧,这个总体不算很难,而且滑动窗口,以及哈希都比较常见

审题目+事例+提示:

解题思路(滑动窗口+哈希):

1、定义双指针f=0,s=-1,从字符串的同一侧出发进行遍历

2、f首先遍历:

    ·若与前面无重复,则放入哈希表,更新最长字符串长度,接着遍历下一位

   · 若当前出现与之前的字符重复,则f访问下一位,s访问前面重复字符的下一位

   ·重复上述过程。

3、返回对应的字符串长度

代码实现:

class Solution {
    public int dismantlingAction(String arr) {
           //创建哈希表,key装字符元素,value装对应的下标
        Map<Character, Integer> dic = new HashMap<>();
         //res装相应字符串最大长度
        int s = -1, res = 0, len = arr.length();
        for(int f = 0; f < len; f++) {
            if (dic.containsKey(arr.charAt(j)))
                //与前面字符出现重复,比较下标大小,更新s
                s = Math.max(s, dic.get(arr.charAt(f))); // 更新左指针 s
            // 当存在重复时更新重复元素哈希表记录的下标,当无重复时放入无重复元素及下标
            dic.put(arr.charAt(f), f);
            res = Math.max(res, f - s); // 更新最长字符串长度结果
        }
        return res;
    }
}


http://www.kler.cn/a/132880.html

相关文章:

  • 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质
  • 详细分析ip addr show 查看网络配置的命令
  • Gin 框架中间件详细介绍
  • 【WPF】Prism学习(三)
  • 2024-11-16 串的存储结构
  • TypeORM在Node.js中的高级应用
  • spark性能调优 | 默认并行度
  • ROS 学习应用篇(七)ROS中的坐标变换管理之tf初探
  • Zabbix5.0部署及应用
  • 教你轻松解决win系统ucrtbased.dll丢失的问题,亲测有效!
  • kafka入门(一):kafka消息消费
  • 若依中脱敏
  • C#WPF文本转语音实例
  • 人工智能发展前景
  • Flutter 应用启动从闪屏页短暂黑屏再到第一个页面
  • 超全整理,Pytest自动化测试框架-多进程(pytest-xdist)运行总结...
  • Web前端—移动Web第一天(平面转换、渐变、综合案例--播客网页设计)
  • 计算机网络八股文
  • 十三、Docker的安装
  • 【刷题专栏—突破思维】LeetCode 138. 随机链表的复制
  • 趣学python编程 (二、计算机硬件和用途介绍)
  • ai语音电销机器人电销行业要怎么降低封号率?
  • Kotlin--1.基础语法
  • 在国内购买GPT服务前的一定要注意!!!
  • git基础命令
  • 【微信公众号】一、获取 access_token