LeetCode 第3题:给定一个字符串,找出不含有重复字符的最长子串的长度。

public class LeetCode3 {
       public static void main(String[] args) {
        /**
         * LeetCode第3题:
         * 给定一个字符串,找出不含有重复字符的最长子串的长度。
         * 示例:给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
         * 解题思路:建立指针i,j,i=0,j=i+1;最大字符长度为max
         * if str[i-(j-1)]的区间中存在 = str[j] , i++;j=i+1;break;
         * else j++;
         * 运行时间 n的2次方
         */
           String s = "pwwkew";
           System.out.println(lengthOfLongestSubstring(s));
    }
       
       public static int lengthOfLongestSubstring(String s) {
           if(s.length() == 1) return 1;
           if(s.length() == 0) return 0;
           char str[] = s.toCharArray(); 
           int i = 0,j = i+1,max = 0;
           boolean  t = true;
           while(i < s.length() - 1){
                   int length = 1;
                   //检测是否重复
                   if(j == s.length()) break;
                   for(int k = i; k < j;k++){
                       if(str[j] != str[k] ){
                           length++;
                           }else{
                               t = false;
                                break;
                           }
                   }
                   if(length > max){
                       max = length; 
                   }
                   //如果检测成功,j指针右移一次
                   if(t) j++;
                   //检测失败,i指针右移一次,j指针回到i+1的位置
                   else{
                       t = true; i++; j = i + 1; length = 1;
                   }
           }
           return max;
       }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值