LeetCode 3

题目见:https://leetcode.com/problemset/all/

3. Longest Substring Without Repeating Characters

题目很容易明白,大串中取最大子串,并返回最大子串的长度。

直观做法就是比较字符是否重复,故将String-->char[], 遍历每个字符,将遍历到的字符存入集合,在存入集合时判断集合中是否已经存在了当前操作的字符,若没有则直接存入,若有则说明子串此处会出现重复。接下来记录当前集合中子串的长度,再将当前集合中当前相同字符及之前的字符全部从集合中删除,删除操作结束后将当前字符存入集合,更新集合大小变量,循环。。。

友情提示:删除操作注意集合索引变量的变化。。。

源代码:

char[] ch = s.toCharArray();
int max = 0;
int num = 0;
ArrayList<Character> chAL = new ArrayList<Character>();
for(int i=0;i<ch.length;i++){

    if(!chAL.contains(ch[i])){

        chAL.add(ch[i]);

        num++;

    }
else{

        if(num > max) max = num;

        for(int j=0;j<chAL.size();j++){

            if(chAL.get(j) == ch[i]){
                chAL.remove(j);
                break;
            }else

                chAL.remove(j--);
        }
        chAL.add(ch[i]);

        num = chAL.size();
    }
}

return num > max ? num : max;

代码参考:http://www.cnblogs.com/grandyang/p/4510984.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值