牛客NC179 长度为 K 的重复字符子串【simple 哈希,滑动窗口 C++、Java、Go、PHP】

题目

在这里插入图片描述

题目链接:
https://www.nowcoder.com/practice/eced9a8a4b6c42b79c95ae5625e1d5fd

思路

哈希统计每个字符出现的次数。没在窗口内的字符要删除

参考答案C++

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @param k int整型* @return int整型*/int numKLenSubstrRepeats(string s, int k) {//哈希统计int n = s.size();map<int, int> mymap;int cnt = 0;for (int i = 0; i < n; i++) {int x = s[i];// 在map中查找元素auto it = mymap.find(x);if (it != mymap.end()) {int t = it->second;mymap.erase(x); //更新值,先删除原来的keymymap.insert(pair<int, int>(x, t + 1)); //往map中新增k,v} else {mymap.insert(pair<int, int>(x, 1)); //往map中新增k,v}if (i >= k - 1) {if (i >= k) { //要移除左边的过期的窗口int delk = s[i - k];auto it = mymap.find(delk);int tmp = it->second;mymap.erase(delk); //更新值,先删除原来的keymymap.insert(pair<int, int>(delk, tmp - 1)); //往map中新增k,vit = mymap.find(delk);if (it->second == 0) {mymap.erase(it); //map中删除key}}if (mymap.size() < k) { //map的大小cnt++;}}}return cnt;}
};

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @param k int整型* @return int整型*/public int numKLenSubstrRepeats (String s, int k) {//哈希来统计Map<Character,Integer> map = new HashMap<>();int n = s.length();int cnt=0;for (int i = 0; i <n ; i++) {char c = s.charAt(i);if(map.containsKey(c)){map.put(c,map.get(c)+1);}else{map.put(c,1);}if(i>=k-1){if(i>=k){ //需要删除左边窗口外的char delchar = s.charAt(i-k);map.put(delchar,map.get(delchar)-1);if(map.get(delchar) ==0){map.remove(delchar);}}if(map.size()<k){cnt++;}}}return cnt;}
}

参考答案Go

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @param k int整型* @return int整型*/
func numKLenSubstrRepeats(s string, k int) int {//哈希来统计n := len(s)cnt := 0map1 := map[byte]int{}for i := 0; i < n; i++ {char := s[i]_, ok := map1[char]if !ok {map1[char] = 1} else {map1[char] += 1}if i >= k-1 {if i >= k { //需要移除左边过期的窗口chardel := s[i-k]map1[chardel] -= 1if map1[chardel] == 0 {delete(map1, chardel)}}if len(map1) < k {cnt++}}}return cnt
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param s string字符串 * @param k int整型 * @return int整型*/
function numKLenSubstrRepeats( $s ,  $k )
{//哈希来统计$cnt = 0;$map = [];$n = strlen($s);for($i=0;$i<$n;$i++){$c = $s[$i];if(!isset($map[$c])){$map[$c] =1;}else{$map[$c]+=1;}if($i>=$k-1){if($i>=$k){$delkey = $s[$i-$k];$map[$delkey]-=1;if($map[$delkey] ==0){unset($map[$delkey]);}}if(count($map) <$k){$cnt++;}}}return $cnt;
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Day08-Java进阶-递归异常及其处理自定义异常

1. 递归 package com.itheima.recursion;public class RecursionDemo3 {/*不死神兔(斐波那契额数列)*/public static void main(String[] args) {int sum getSum(20);System.out.println(sum);}public static int getSum(int n) {if (n 1 || n 2) {return 1;} else {return …

【nginx】nginx启动显示80端口占用问题的解决方案

目录 &#x1f305;1. 问题描述 &#x1f30a;2. 解决方案 &#x1f305;1. 问题描述 在启动nginx服务的时候显示内容如下&#xff1a; sudo systemctl status nginx 问题出现原因&#xff1a; 根据日志显示&#xff0c;Nginx 服务启动失败&#xff0c;主要原因是无法绑定…

day1c++基础

const char*p;//值不可以改变&#xff0c;地址可以改变 const &#xff08;char*&#xff09;p; //值不可以改变&#xff0c;地址可以改变 char* const p; //值可以改变&#xff0c;地址不可以改变 const char* const p; //值不可以改变&#xff0c;地址不可以改变 char co…

【C++】封装、继承和多态

引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;Object Oriented Programming&#xff09;已经成为一种广泛应用的编程范式。C作为一种支持面向对象编程的语言&#xff0c;在封装、继承和多态方面提供了强大的特性。本文将介绍C中的封装、继承和多态概念&#xff…

element plus:tree拖动节点交换位置和改变层级

图层list里有各种组件&#xff0c;用element plus的tree来渲染&#xff0c;可以把图片等组件到面板里&#xff0c;面板是容器&#xff0c;非容器组件&#xff0c;比如图片、文本等&#xff0c;就不能让其他组件拖进来。 主要在于allow-drop属性的回调函数编写&#xff0c;要理清…

数字逻辑电路基础-有限状态机

文章目录 一、有限状态机基本结构二、verilog写一个基础有限状态机(moore型状态机)三、完整代码一、有限状态机基本结构 本文主要介绍使用verilog编写有限状态机FSM(finite state machine),它主要由三部分组成,下一状态逻辑电路,当前状态时序逻辑电路和输出逻辑电路。 有…

ZYNQ之嵌入式开发04——自定义IP核实现呼吸灯、固化程序

文章目录 自定义IP核——呼吸灯实验固化程序 自定义IP核——呼吸灯实验 Xilinx官方提供了很多IP核&#xff0c;在Vivado的IP Catalog中可以查看这些IP核&#xff0c;在构建自己复杂的系统时&#xff0c;只使用Xilinx官方的免费IP核一般满足不了设计的要求&#xff0c;因此很多…

NOIP,CSP-J,CSP-S——高精度加减乘除

一、高精度加法 1、大整数的输入 int的范围,正负上下限大约为2.1*10^9; long long的范围,正负上下限大约为9.2*10^18; 如果整数成千上万位,那么这么大的整数我们如何处理? 方法:先用字符串输入,然后把每一个字符转换成为数字,存到一个int数组里 int数组中的一个位…

揭秘Faiss:大规模相似性搜索与聚类的技术神器深度解析!

Faiss&#xff08;由Facebook AI Research开发&#xff09;是一个用于高效相似性搜索和密集向量聚类的库。它用C编写&#xff0c;并提供Python绑定&#xff0c;旨在帮助研究人员和工程师在大规模数据集上进行快速的相似性搜索和聚类操作。 一、介绍&#xff1a; Faiss的核心功…

OSPF认证方式,ISIS简介,ISIS路由器类型

OSPF&#xff1a;转发&#xff0c;泛洪&#xff0c;丢弃

ROS 2边学边练(33)-- 写一个静态广播(C++)

前言 通过这一篇我们将了解并学习到如何广播静态坐标变换到tf2&#xff08;由tf2来转换这些坐标系&#xff09;。 发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如&#xff0c;在以激光扫描仪中心的坐标系中推理激光扫描测量数据是最简单的。 这…

C++学习进阶版(一):用C++写简单的状态机实现

目录 一、基础知识 1、状态机 2、四大要素 3、描述方式 4、设计步骤 5、实现过程中需注意 &#xff08;1&#xff09; 状态定义 &#xff08;2&#xff09; 状态转换规则 &#xff08;3&#xff09; 输入处理 &#xff08;4&#xff09; 状态机的封装 &#xff08;5…

本地部署Docker容器可视化图形管理工具DockerUI并实现无公网IP远程访问——“cpolar内网穿透”

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

路由过滤与引入

1、实验拓扑 2、实验要求 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 上使用 1oopback口模拟业务网段 2、运行 oSPF&#xff0c;各自协议内部互通 3、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的业务…

基于51单片机的温度、烟雾、防盗、GSM上报智能家居系统

基于51单片机的智能家居系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20检测温度&#xff0c;MQ-2检测烟雾、ADC0832实现模数转换&#xff1b; 2.按键可以设置温度、烟雾浓度阈值&#x…

【Java--数据结构】提升你的编程段位:泛型入门指南,一看就会!

前言 泛型是一种编程概念&#xff0c;它允许我们编写可以适用于多种数据类型的代码。通过使用泛型&#xff0c;我们可以在编译时期将具体的数据类型作为参数传递给代码&#xff0c;从而实现代码的复用和灵活性。 在传统的编程中&#xff0c;我们通常需要为不同的数据类型编写不…

10 JavaScript学习:函数

函数的概念 JavaScript中的函数是一段可重复使用的代码块&#xff0c;它接受输入&#xff08;称为参数&#xff09;&#xff0c;执行特定的任务&#xff0c;并返回一个值。函数可以被调用&#xff08;或者说被执行&#xff09;&#xff0c;并且可以接受不同的输入来产生不同的…

提升效率!微信自动统计数据报表,轻松实现!

在数字化时代&#xff0c;提高工作效率是每个人的追求。下面就给大家分享一个能够自动统计微信号运营数据的神器——个微管理系统&#xff0c;让大家无需手动整理和计算&#xff0c;提高工作效率&#xff01; 1、好友统计报表 它分为通讯录好友统计、新增好友统计和删除好友统…

python创建线程和结束线程

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 python创建线程和结束线程 在 Python 中&#xff0c;线程是一种轻量级的执行单元&#xff…

Mysql 存在多条数据,按时间取最新的那一组数据

1、数据如下&#xff0c;获取每个用户最近的一次登录数据 思路1&#xff1a;order by group by 先根据UserIdLogInTime排序&#xff0c;再利用Group分组&#xff0c;即可得到每个User_Id的最新数据。 1 SELECT * FROM login_db l ORDER BY l.user_id, l.login_time DESC; 排…