字节飞书面试算法题

后端]计算没有重复字符的子字符串数量

题目描述
给定你一个只包含小写英文字母的字符串 s 。如果一个子字符串不包含任何字符至少出现两次(换句话说,它不包含重复字符),则称其为 特殊 子字符串。你的任务是计算 特殊 子字符串的数量。例如,在字符串 "pop" 中,子串 "po" 是一个特殊子字符串,然而 "pop" 不是 特殊 子字符串(因为 'p' 出现了两次)。​
返回 特殊 子字符串的数量。​
子字符串 是指字符串中连续的字符序列。例如,"abc" 是 "abcd" 的一个子字符串,但 "acd" 不是。​
 ​
示例 1:​
输入:s = "abcd"​
输出:10​
解释:由于每个字符只出现一次,每个子串都是特殊子串。长度为 1 的子串有 4 个,长度为 2 的有 3 个,长度为 3 的有 2 个,长度为 4 的有 1 个。所以一共有 4 + 3 + 2 + 1 = 10 个特殊子串。​
示例 2:​
输入:s = "ooo"​
输出:3​
解释:任何长度至少为 2 的子串都包含重复字符。所以我们要计算长度为 1 的子串的数量,即 3 个。​
示例 3:​
输入:s = "abab"​
输出:7​
解释:特殊子串如下(按起始位置排序):​
长度为 1 的特殊子串:"a", "b", "a", "b"​
长度为 2 的特殊子串:"ab", "ba", "ab"​
并且可以证明没有长度至少为 3 的特殊子串。所以答案是4 + 3 = 7

使用双指针或滑动窗口的方法来实现这个功能。以下是一个简单的Go语言实现:

package mainimport ("fmt"
)func countSpecialSubstrings(s string) int {n := len(s)count := 0for left := 0; left < n; left++ {charSet := make(map[byte]bool, n-left) // 创建一个字符集合用于记录当前子串中的字符for right := left; right < n; right++ {if _, exists := charSet[s[right]]; exists { // 如果字符已经在集合中,则说明出现了重复break}charSet[s[right]] = true // 将当前字符添加到集合中count++                  // 没有重复字符时,特殊子字符串数量+1}}return count
}func main() {s := "abab"fmt.Println(countSpecialSubstrings(s)) // 输出: 3
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉基础:【矩阵】矩阵选取子集

OpenCV的基础是处理图像&#xff0c;而图像的基础是矩阵。 因此&#xff0c;如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作&#xff0c;从而更好地实现对图像的处理。 示例 示例&#xff1a;选取矩阵中指定的行和列的…

Positive Technologies 确保 Rostic‘s 网络应用程序的安全

☑️ PT BlackBox分析 Rostics 网络应用程序的安全性 快餐连锁店在其安全网络开发过程中使用了我们的扫描仪。PT BlackBox 总共扫描了 20 多个 Rostics 的外部服务&#xff08;每天访问量超过 100,000 人次&#xff09;和企业服务&#xff08;每天访问量≈7,000 名员工&#x…

区块链游戏解说:什么是 Nine Chronicles

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a; Nine Chronicles Dashboard 什么是 Nine Chronicles Nine Chronicles 是一款去中心化的在线角色扮演游戏&#xff0c;标志着在线游戏和区块链技术的发展。 Nine Chroni…

小米14 ULTRA:重新定义手机摄影的新篇章

引言 随着科技的飞速发展&#xff0c;智能手机已经不仅仅是一个通讯工具&#xff0c;它更是我们生活中的一位全能伙伴。作为科技领域的佼佼者&#xff0c;小米公司再次引领潮流&#xff0c;推出了全新旗舰手机——小米14 ULTRA。这款手机不仅在性能上进行了全面升级&am…

基于springboot+vue医院电子病历管理系统

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | node 二、 代码及数据库 三、功能介绍 01. 登录页 02. 用户管理-管理员 03. 用户管理-患者 04. 用户管理-医生 05. 用户管理…

如何实现上拉加载,下拉刷新?

文章目录 一、前言二、实现原理上拉加载下拉刷新 三、案例小结 参考文献 一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页&#xff0c;只是交互形式不同 开源社区也有很多优秀的解决方案&#xff0c;如iscroll、better-scroll、pu…

2023年06月CCF-GESP编程能力等级认证C++编程三级真题解析

一、单选题(每题 2 分,共 30 分) 第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试 D. 编译 答案:D 第2题 二进制数 11.01 在十进制下是( )。 A. 3.01 B. 3.05 C. 3.125 D. 3.25 答案:D 第3题 已…

APK签名生成工具​

APK签名生成工具​ 点击下载安装签名生成工具&#xff0c;将你的应用的线上包安装到手机上&#xff0c;输入应用正确包名即可获取到签名信息。​ 注意&#xff1a;debug 包和线上包生成的签名是不一样的&#xff0c;所以这个地方要用线上包生成。​ 目前也支持使用keytool命…

每日一题——LeetCode1470.重新排列数组

方法一 把数组的前n项看做一个数组&#xff0c;后n项看做一个数组&#xff0c;两个数组循环先后往res里push元素 var shuffle function(nums, n) {let res[]for(let i0;i<n;i){res.push(nums[i])res.push(nums[in])}return res }; 消耗时间和内存情况&#xff1a; 方法二…

【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136141769 查看使用说明 --><div :class"$options.name"><div class"sg-head">表格数据生成工具</div><div class"sg-container&quo…

multipath多路径显示异常

一、现象 使用multipath -ll显示一个磁盘多大3条路径都是active faulty running状态&#xff0c;而正常状态的链路应该是&#xff1a;active ready running&#xff0c;具体如下图&#xff1a; 二、分析 1、通过各种检查均未发现异常&#xff0c;检查内容包括&#xff1a;操作…

刷LeetCode541引起的java数组和字符串的转换问题

起因是今天在刷下面这个力扣题时的一个报错 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 这个题目本身是比较简单的&#xff0c;所以就不讲具体思路了。问题出在最后方法的返回值处&#xff0c;要将字符数组转化为字符串&#xff0c;第一次写的时候也没思考直…

【Spring Boot 使用Filter统一处理请求数据转换】

Spring Boot 使用Filter统一处理请求数据转换 背景知识Spring Boot Filter 使用场景 请求预处理技术实现1. 创建自定义Filter类2. 创建自定义请求包装器3. 注册Filter 背景知识 Spring Boot Filter 使用场景 身份验证和授权 场景描述: 在用户访问应用程序的敏感资源之前&…

【经验分享】自然语言处理技术有哪些局限性和挑战?

个人认为&#xff0c;主要是两个难点&#xff1a; 1.语料&#xff0c;通常的语料很好解决&#xff0c;用爬虫从互联网上就可以采集和标注训练。但是我们接触很多项目和客户需求都是专业性很强的&#xff0c;例如&#xff1a;航天材料、电气设备、地理信息、化学试剂 等等。往往…

Python面向对象:组合

组合与重用性 组合指的是&#xff0c;在一个类中以另外一个类的对象作为数据属性&#xff0c;称为类的组合 class Equip: # 武器装备类 def fire(self): print(release Fire skill) class Riven: # 英雄Riven的类&#xff0c;一个英雄需要有装备&#xff0c;因而需要组合E…

【微服务生态】Docker

文章目录 一、基础篇1. 简介2. 下载与安装3. 常用命令3.1 帮助启动类3.2 镜像命令3.3 容器命令 4. Docker 容器数据券5. Docker 镜像5.1 commit 生成镜像5.2 Docker Registry5.3 发布镜像 6. Docker 常规安装软件 二、高级篇1. Dockerfile1.1 概述1.2 基础知识1.3 Dockerfile常…

使用单元测试框架Junit的正确姿势

大家好&#xff0c;我是G探险者。 不知道大家平时开发出来的功能&#xff0c;写不写单元测试&#xff1f;反正我是不咋写&#xff0c;写个单元测试有时候mock比开发实际功能都难搞&#xff0c;谁写谁懂得。 没办法&#xff0c;由于甲方爸爸的要求&#xff0c;我们必须得写单元…

如何系统地自学Python?

如何系统地自学Python&#xff1f; 如何系统地自学Python&#xff1f;1.了解编程基础2.学习Python基础语法3.学习Python库和框架4.练习编写代码5.参与开源项目6.加入Python社区7.利用资源学习8.制定学习计划9.持之以恒总结 如何系统地自学Python&#xff1f; 作为一个Python语…

爬虫基本库的使用(urllib库的详细解析)

学习爬虫&#xff0c;其基本的操作便是模拟浏览器向服务器发出请求&#xff0c;那么我们需要从哪个地方做起呢?请求需要我们自己构造吗? 我们需要关心请求这个数据结构怎么实现吗? 需要了解 HTTP、TCP、IP层的网络传输通信吗? 需要知道服务器如何响应以及响应的原理吗? 可…

32单片机基础:GPIO输出

目录 简介&#xff1a; GPIO输出的八种模式 STM32的GPIO工作方式 GPIO支持4种输入模式&#xff1a; GPIO支持4种输出模式&#xff1a; 浮空输入模式 上拉输入模式 下拉输入模式 模拟输入模式&#xff1a; 开漏输出模式&#xff1a;&#xff08;PMOS无效&#xff0c;就…