Leetcood Problem3 longest substring

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

思路:本题的第一感觉就是运用动态规划的方法进行解题,本人的动态规划这方面的知识掌握不是太好,本来都打算改用其他方法了,没想到最后还给解决了。本题无非就是遍历这个字符串的每一个字符,将它与前面的子串进行比较,如果在前面出现过,那么此位置的字符的最大串长度是此位置与上一次出现位置的差,若此字符在前面的位置中没有出现过,那么此位置的字符的最大长度为前一位置字符最大长度+1.

注意点:1 空串

      2 每次循环的起始位置

代码如下 已通过leetcode

public class Solution {
   public int lengthOfLongestSubstring(String s) {
    if(s.length()==0) return 0;
    if(s.length()==1) return 1;
      int dp[]=new int[s.length()];
      int i,j;
      int maxlen=0;
      boolean flag=false;
      dp[0]=1;
      int start=0;
      for(i=1;i<s.length();i++) {
      for(j=i-1;j>=start;j--) {
      if(s.charAt(i)==s.charAt(j)) {
      flag=true;
      start=j;//注意,此时的起始位置是从j开始,而不是i开始
      dp[i]=i-j;
      break;
      }
      }
      if(!flag) {
      dp[i]=dp[i-1]+1;
      }
      if(dp[i]>maxlen) {
      maxlen=dp[i];
      }
      flag=false;
      }
     return maxlen;  
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值