【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)

一、问题描述

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

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

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

示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

二、go语言
1、暴力法
// leetcode-3
package main

import (
	"fmt"
)

func lengthOfLongestSubstring(s string) int {
	length := len(s)
	if length < 2 {
		return length
	}

	max := 1
	c := []byte(s)
	for i := 0; i < length; i++ {
	hear:
		for j := i + 1; j < length; j++ {
			for k := i; k < j; k++ {
				if c[j] == c[k] {
					if j-i > max {
						max = j - i
					}
					break hear
				} else if k == j-1 {
					if j-i+1 > max {
						max = j - i + 1
					}
				}
			}
		}
	}

	return max
}

func main() {
	strings := []string{"", "a", "ab", "abc", "abcda", "abcabcabcd", "aaatgabca"}
	lengthsExpect := []int{0, 1, 2, 3, 4, 4, 5}
	length := 0
	for index, s := range strings {
		length = lengthOfLongestSubstring(s)
		fmt.Printf("s(\"%s\"):expect lenght=%d;  actual length=%d\n", s, lengthsExpect[index], length)
	}
}

输出:

s(""):expect lenght=0;  actual length=0
s("a"):expect lenght=1;  actual length=1
s("ab"):expect lenght=2;  actual length=2
s("abc"):expect lenght=3;  actual length=3
s("abcda"):expect lenght=4;  actual length=4
s("abcabcabcd"):expect lenght=4;  actual length=4
s("aaatgabca"):expect lenght=5;  actual length=5

你可能感兴趣的:(力扣刷题)