【LeetCode】 Longest Substring Without Repeating Characters(Java)

Question:

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.


题目意思是求解字符串中连续的不重复的长度

思路:
1、首先需要一个计数器,去记录最大不重复连续字符串的长度。
2、需要一个集合(List,Set都行),去存放不重复的字符串。
3、对字符串进行判断,若为空,则直接返回0。不为空,应首先向集合中添加字符串的第一个元素,计数器count++;
4、应需要一个判别标志flag,去判断下一个字符是否为重复,重复为false
5、需要两个嵌套循环,第一层是遍历字符串,第二层去遍历集合,若集合中有元素与字符串当前字符相同,则跳出循环。并且flag为false。
6、第二层循环遍历完后,判断【j】的索引是否与集合大小相等。(相等说明当前字符没有与集合中任何元素相同)。相等后,还要进行判断当前索引是否和计数器的值相等(count应该记录的是最大不重复的长度),若相等,count++
7、若有重复元素,flag为false,则应该删除第一个至索引处的集合元素。flag=true
8、最后添加当前的字符到集合(无论如何都要添加),进入下一次循环
9、两层循环遍历完后,返回count


核心代码:

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        int count=0;
        boolean flag=true;
        List<Character>list=new ArrayList<>();
        if(!s.equals("")){
        list.add(s.charAt(0));
        count++;
        }
        for(int i=1;i<s.length();i++){
            int j=0;
            for(;j<list.size();j++){
                if(list.get(j).equals(s.charAt(i))){
                    flag=false;
                    break;
                }
            }
            if(j==list.size()){
                if(j==count)
                count++;
            }
            if(flag==false){
                for(int k=0;k<=j;k++)
                    list.remove(0);
                flag=true;
            }
            list.add(s.charAt(i));
        }
        return count;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值