首页 > 其他分享 >无重复字符的最长子串

无重复字符的最长子串

时间:2024-04-26 09:44:34浏览次数:29  
标签:子串 字符 end 重复 count start 最长

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

示例 1:

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

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

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

// 使用aiisc码表做判断比用官方题解的哈希更快
func lengthOfLongestSubstring(s string) int {
	// 使用双指针加byte数组判断是否重复
	start, end := 0, 0
	boolArray := [128]bool{}
	count := 0
	for end < len(s) {
		// 首先判断是否存在重复
		if boolArray[s[end]] {
			// 记录count
			if count < end-start {
				count = end - start
			}
			// 如果重复将区间指针跳转到重复字母后
			for s[end] != s[start] {
				// start一直自增 直到选择到相同的字母, 并且去掉走过的字母
				boolArray[s[start]] = false
				start++
			}
			// 继续自增一次, 将相同的字母放到身后
			start++
		} else {
			// 将遍历到的字符加入数组做判断用
			boolArray[s[end]] = true
		}
		end++
	}
	if count < end-start {
		count = end - start
	}
	return count
}

标签:子串,字符,end,重复,count,start,最长
From: https://www.cnblogs.com/sunchenxuan/p/18159282

相关文章

  • SQL SERVER中的字符类型使用Unicode
    字符编码和排序规则下面的讨论用到W、王和......
  • 利用顺序栈判断字符串是否有效
    数据结构顺序表笔试题:通过键盘输入一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的......
  • Python 字符串格式化指南
    前言在Python中,字符串格式化是一种常见且重要的操作,用于将变量或值插入到字符串中,并控制输出的格式。本文将介绍几种常见的字符串格式化方法,帮助大家掌握在Python中有效地处理字符串的技巧。方法一:使用%操作符格式化字符串使用%操作符是一种传统的字符串格式化方法,可......
  • Unity性能优化——字符串和文本
    字符串和文本字符串和文本的处理不当是Unity项目中性能问题的常见原因。在C#中,所有字符串均不可变。对字符串的任何操作均会导致分配一个完整的新字符串。这种操作的代价相对比较高,而且在大型字符串上、大型数据集上或紧凑循环中执行时,接连不断的重复的字符串可能发展成性能......
  • 用顺序栈判断输入的字符串是否有效 (笔试题)
    思想:1、先对Manager的Top(栈中有效数据的下标)备份,用循环对字符串进行遍历a.当前字符不为'('和‘)’则进行下一次循环b.当前字符为'('则将'('入栈,并将Manager中的Top(下标)加1c.当前字符为')'则判断当前Top是否与备份的数值相等,如不相等,则')'前面没有'('与之配对,既字符串无效,直......
  • Linux给文件隔两个字符插入-
    需求:如下maclist.txt文件,每行都是固定个数字符串,现在需要在每行隔两个字符插入一个- 解决方案:使用sed命令进行插入替换,并将内容重新写入new.txt文件中sed  s/是sed替换命令参数,\(.\)匹配任意一个字符,\1和\2分别引用第一个和第二个括号内匹配的值,-是要插入的字......
  • 线性dp--最长上升子序列变形
    ATwistyMovement洛谷链接:https://www.luogu.com.cn/problem/CF933Acodeforce链接:https://codeforces.com/problemset/problem/933/A题面翻译给定一个序列A,你可以翻转其中的一个区间内的数,求翻转后的序列的最长不下降子序列的长度。(\(|A|\le2000,1\lea_i\le2\))感谢@to......
  • 输入‘(’和‘)’判断字符串有效的函数算法
    ``//设置一个函数,通过输入键盘中的‘(’和‘)’判断字符串是否有效//顺序表中的元素数据类型是char类型typedefcharDataType_t;//创建顺序栈SequenceStack各项数据(栈底地址栈容量栈顶元素下标)的结构体typedefstructSequenceStack{DataType_t*Bottom;//记录栈......
  • 第三章 字符串、向量和数组
    当用+连接string对象和字符串字面值的时候,必须确保有一个操作数是string对象。头文件包含字符处理相关函数使用范围for循环实际上是在使用迭代器循环,所以不能再循环里改变容易容量或执行让迭代器失效的操作。数组的名字在很多情况下会转换成指针,auto会推导出指针,但是decltype还......
  • golang工具函数,把一个金额整型,单位为分,转成"1,231,111.00"格式的字符串
    这个函数首先将整数除以100来获取代表元的浮点数,然后格式化此数值为两位小数的字符串。接下来,函数将字符串分成整数和小数部分,并且为整数部分添加千位分隔符。最后,如果存在小数部分,它会将这两部分重新组合并返回正确格式化的金额字符串。为了正确地处理负数,我们需要先检查金额是......