首页 > 其他分享 >求字符串中最长长度的字串

求字符串中最长长度的字串

时间:2023-02-25 00:12:22浏览次数:56  
标签:set HashSet 元素 boolean 字串 字符串 长度 最长

题目

  给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

  今天做题时间有点晚,之前学习算法与数据结构,解决方法好像是用kmp算法来着,今天想发一下暴力解决该问题的思路。

  就是双重循环,首先定义一个HashSet,HashSet的数据结构是适合解决这题的。

  HashSet的特点,HashSet是基于HashMap来实现的,不允许有重复的元素。

  允许有null值,是无序的,不会记录插入元素的顺序。

  不是线程安全的,如果多个线程尝试同时修改HashSet,最终结果是不确定的。必须在多线程访问时显式同步对HashSet的并发访问。

HashSet实现了Set,他的常用方法

  boolean add(E e)    boolean  remove(Object o)    boolean contains(Object o) 存在返回true  void clear() 清除所有元素

  int  size() 返回set中元素的个数   Iterator<E> iterator()返回元素的迭代器   boolean isEmpty()  判断set是否为空,是则返回true

  还有两个方法不太了解:

    Spliterator<E>  spliterator() 在此集合中的元素上创建late-binding失败快速 Spliterator 。Object  clone() 返回此 HashSet实例的浅表副本:未克隆元素本身。

  

想说下解题思路:

  首先判断字符串的长度,如果小于等于1,就直接返回字符串的长度。

  定义变量结果 ans,用于存储最长字串的长度。

  然后建立HashSet的对象 set,循环遍历字符串,for( int i = 0 ;  i < s.length() ; i++),s为字符串对象,

  在循环体内向set里面插入元素,在建立循环 for(int j = i + 1 ; j <= s.length() ;j++ )

循环体里面判断 

  if ( j == n ||  set.contains( s.charAt(j) ))

  如果满足条件就直接将set.size()与ans比较,去最大值作为字串的长度,将set清空,结束内层循环。

  否则继续向set里面插入元素。

  

 

  

  

标签:set,HashSet,元素,boolean,字串,字符串,长度,最长
From: https://www.cnblogs.com/20203923rensaihang/p/17153537.html

相关文章

  • 【LeeCode】424. 替换后的最长重复字符
    【题目描述】给你一个字符串 ​​s​​​ 和一个整数 ​​k​​​ 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 ​​k​​ ......
  • 【LeeCode】1208. 尽可能使字符串相等
    【题目描述】给你两个长度相同的字符串,​​s​​​ 和 ​​t​​。将 ​​s​​ 中的第 ​​i​​ 个字符变到 ​​t​​ 中的第 ​​i​​ 个字符需要 ​​|s[i......
  • Redis设计与实现—简单动态字符串、链表、字典
    前言《Redis设计与实现》数据结构部分有关字符串类型介绍。@目录前言一、数据结构——简单动态字符串1.1SDS定义1.2SDS与C字符串的区别1.2.1常数复杂度获取字符串长度......
  • redis(4)String字符串
    前言Redis中有5大数据类型,分别是字符串String、列表List、集合Set、哈希Hash、有序集合Zset,本篇介绍Redis的字符串String Redis字符串String是Redis最基本的类型,你可......
  • Java判断字符串是否为数字(正负、小数)
    BooleanstrResult=number.matches("-?[0-9]+.*[0-9]*");if(strResult){ //将字符串转换成Double类型 doublen=Double.valueOf(number); //四舍五入保留两位 Bi......
  • 【后端过程记录】用flask搭建服务器作后端接收数据 将base64字符串码解码为可读取文件
    因为项目的原因了解到有一个python的flask框架,查了一下:关于前端图片上传的canvas:如下元素<canvasid="canvas"width="5"height="5"></canvas>可以用这样的方式获......
  • 字符串
    字符串赋值(C字符串)将字符串b赋值给字符串a:=:定义时赋值,b必须是字符串变量。 strcpy(char*a,char*b) :b须是字符串常量或C字符串。例:chara[20],b[20]="Hello";......
  • Redis SET命令用于在Redis键中设置一些字符串值。
    RedisSET命令用于在Redis键中设置一些字符串值。返回值如果在键中设置了值,返回简单字符串回复:OK。如果值没有设置则返回Null。语法下面是RedisSET命令的基本语法......
  • P3989 [SHOI2013]阶乘字符串 题解
    由于一些不可抗拒的原因,\(n\ge22\)无解。那么只用考虑\(n\le21\)的情况即可。由于\(n\)的范围缩小,导致状压又可以重新使用,所以考虑状压。设\(f_i\)为\(i\)中......
  • 【YBT2023寒假Day14 C】字符串题(SAM)(树链剖分)(线段树)
    字符串题题目链接:YBT2023寒假Day14C题目大意对于一个字符串S定义F(S)是fail树上除了0点其它点的深度和。G(S)是S每个子串S'的F(S')之和。然后一个空......