• Java算法练习——无重复字符的最长子串


    题目链接

    题目描述

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1

    输入: "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    

    示例 2

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    

    示例 3

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    

    题解 1

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            char[] chars = s.toCharArray();
    		int max = 0;
    		if (chars.length == 0) {
    			return 0;
    		} else if (chars.length == 1) {
    			return 1;
    		}
    		//重复的坐标
    		int len = 0;
    		// 外层for循环  用来计算总长
    		int j ;
    		//内层for循环  用来计算总长
    		int k;
    		for (j=0; j <chars.length ; j++) {
    			for (k = len;  k<j ; k++) {
    				if (chars[j] == chars[k]) {
    					len = k+1 ;
    					break;
    				}
    			}
    			max = max < j - len + 1? j - len + 1: max;
    		}
    		return max;
        }
    }
    

    题解 2

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            int len = s.length();
            if (len == 0 || len == 1) {
                return len;
            }
            List<Character> list;
            int n = 0;
            for (int i = 0; i < len; i++) {
                list = new ArrayList<>();
                for (int j = i; j < len; j++) {
                    if (!list.contains(s.charAt(j))) {
                        list.add(s.charAt(j));
                        n = n > j - i + 1? n : j - i + 1;
                    } else {
                        break;
                    }
                }
            }
            return n;
        }
    }
    

    手记

    一道值得品味的题。同样是遍历,但是 题解 1 要比 题解 2快上不少。双层for 循环的部分,值得用心分析。

    猴急

    做题不要像这个小标题
    以上

  • 相关阅读:
    天心阁漫步
    大美湘江
    easyui tree基本操作
    盗墓笔记
    半年了
    文件上传控件值发生变化后自动提交表单
    宁静的夏夜
    今天您给别人让座,将来别人给您让座
    优先队列priority_queue 用法详解
    POJ2387
  • 原文地址:https://www.cnblogs.com/mxwbq/p/10918575.html
Copyright © 2020-2023  润新知