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

题目

  给定一个字符串 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里面插入元素。

  

 

  

  

posted @ 2023-02-24 23:59  几人著眼到青衫  阅读(39)  评论(0)    收藏  举报