首页 > 其他分享 >每日一题 Day1

每日一题 Day1

时间:2024-03-06 20:58:05浏览次数:28  
标签:窗口 每日 Day1 键值 哈希 字符串 指针

每日一题 Day1

无重复字符的最长子串

第一印象

第一想法就是使用暴力解法,遍历出每个字符串再用条件筛选符合要求的字符串,时间复杂度为O(N^2)。

滑动窗口与哈希表

滑动窗口(双指针)多用于处理字符串与序列的操作,根据题目的要求,求解串中符合某种条件的序列的最长或者最短的长度。

在本题中即窗口中不包含重复的字符,以右指针的移动更新左指针的边界。

public int lengthOfLongestSubstring(String s) {
        Map<Character,Integer> dic = new HashMap<>(); //创建滑动窗口对应的哈希表
        int i=-1,j=0,len=s.length(),res=0;//定义左右指针,初始化字符串长度,最长字串的长度
        while(j<len){						//开始循环
            if(dic.containsKey(s.charAt(j))){		
                i=Math.max(i, dic.get(s.charAt(j))); //判断,如果右指针的字符存在于哈希表中,则必须将左指针的边界移动到重复字符的下一个字符上
            }
            dic.put(s.charAt(j),j); //如果不重复则更新字符和索引到哈希表中
            res=Math.max(res,j-i);//更新最大子串的长度
            j++;//右指针后移
        }
        return res;
    }

哈希表的Java使用

创建实例:Map<Element,Element> hashmap = new HashMap<>();

方法:

  1. put(); 向哈希表中添加键值,接受两个参数:键和值,如果存在键则会更新值
  2. keySet(); 获取哈希表中所有键的集合,返回一个Set集合
  3. size(); 返回键值的数量
  4. get();获取对应键的值
  5. remove(); 删除key对应的键值
  6. containsKey();判断映射的指定的键是否存在
  7. containsValue();判断映射的指定的值是否存在

标签:窗口,每日,Day1,键值,哈希,字符串,指针
From: https://www.cnblogs.com/gudazi12138/p/18057553

相关文章

  • 每日总结
    ArrayList中的元素实际上是对象,在以上实例中,数组列表元素都是字符串String类型。如果我们要存储其他类型,而<E>只能为引用数据类型,这时我们就需要使用到基本类型的包装类。基本类型对应的包装类表如下: arraylist排序publicstaticvoidmain(String[]args){......
  • 代码随想录算法训练营day14 | leetcode 144. 二叉树的前序遍历、145. 二叉树的后序遍
    目录题目链接:144.二叉树的前序遍历-简单题目链接:145.二叉树的后序遍历-简单题目链接:94.二叉树的中序遍历-简单递归三要素:确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归......
  • Python函数每日一讲 - hex()
    引言在Python编程中,处理十六进制数据是一项常见的任务。hex()函数就是Python中用于将整数转换为十六进制字符串的函数。本文将深入介绍hex()函数的使用方法,并通过实例演示其在实际应用中的作用,帮助大家更好地掌握这一工具。语句概览hex()函数是Python内置函数之一,用于将整数转......
  • 每日导数76
    难难难的双参问题已知函数\(f(x)=\ln(1+x)+\dfrac{x^2}{2}\)(1)当\(x>0\),比较\(f(x)\)与\(x\)的大小(2)若函数\(g(x)=\cosx+\dfrac{x^2}{2}\),且\(f\left(e^{\frac{a}{2}}\right)=g(b)-1(a>0,b>0)\),证明:\(f(b^2)+1>g(a+1)\)解(1)做差,记\(\varphi(x)=f(x)-x=\......
  • 小白从零开始学习编程 day1
    1.什么是编程语言编程语言是用于计算机与人沟通的介质2.什么是编程使用编程语言编写出一系列文件3.为什么进行编程通过奴役计算机,解放劳动力4.计算机的五大组成部分1.CPU(1)控制器:用于控制硬件(2)运算器:进行逻辑运算和算数运算2.内存(1)运行速度快(2)断电即......
  • 每日打卡3月6
    梦想改造家10------皇城脚下的博物馆根据观看的视频内容,回答下列问题:1、 你认为改造的房屋存在什么样的问题?(至少五个存在问题)房龄大,存在安全问题;采光差;物品多,储物空间小;房顶薄,隔热差没有独立空间,私密性差。2、 家的必要功能(可用性)属性包括什么?有地方做饭;有地方吃......
  • 每日总结3/5
    今天学习了登陆界面的操作。学习了连接数据库的用户登录:packagecom.example.clock.db;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandr......
  • 学习 Day1 MarkDown语法练习
    学习Day1MarkDown语法练习Day1,了解了MarkDown的基本语法,为日后的学习做准备。标题语法使用'#'号来标出标题的等级,如:一级标题为('#'+空格),二级标题为('##'+空格)例如:二级标题三级标题字体语法使用特定的语法给字体增加样式加粗字体(使用'**'号)倾斜字体(使用'*'号)......
  • 每日总结
    Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHash......
  • Day1.numpy
    numpy数组的应用1.创建引入numpy库importnumpyasnp创建对象一维arr=np.array([1,2,3])二维arr=np.array([1,2,3],[4,5,6])#相当于一个二维数组2.常用属性T数组维度的转换dtype数据类型shape数组维度大小,如三行四列astype类型转换3.获取行列数arr......