力扣:3. 无重复字符的最长子串

3. 无重复字符的最长子串

解题思路:

这时一个典型的适用滑动窗口的题目。

1.首先初始一个快慢指针i 和 j, j 比 i 快一步。

2.根据i , j 指针来切割出子串,利用循环实时更新子串的长度。 

(特别注意 利用substring( i , j )方法时,i下标可取,而 j下标取不到)

3.在循环中,再定义一个循环利用 n指针将子串中的每一个字符与将要新加入的字符进行比对,

比对产生两种情况:

情况 一:子串的每一个字符都与新要加入的字符不同,则加入新字符,进入下一轮循环。

情况 二: 子串中有一个字符与新要加入的字符相等,则更新i的位置 下标为 n+1,这时则直接退出内层循环。

最后等到 j指针指向末尾,退出外层循环。即可得到最大长度的无重复字符串。

代码部分:

class Solution {

    public int lengthOfLongestSubstring(String s) {

int len = s.length();

if (len==0){ //排除空串的情况

    return 0;

}

int sum = 1; //用于记录最长的无重复字串

int i = 0, j = 1; // 用指针动态的切割字串

while(j<len){

String temp = s.substring(i,j); //根据i,j指针下标来确定所分割的子串长度

int e = temp.length();

int n = 0; //指针

while(n<e){

if(temp.charAt(n)==s.charAt(j)){ //判断字串中是否有与将要新加入的字符重复

i +=n+1; //重复则将 i指针移动到 n的前一个位置 即 n+1

break; //i产生滑动,直接退出匹配的循环。

}

n++;

}

sum = Math.max(sum,j-i+1); //更新最长子串的长度

j++;

}

return sum;

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值