题目
给定一个字符串 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