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

news2024/12/29 9:52:53

题目

在这里插入图片描述

题目链接:
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); //更新值,先删除原来的key
                mymap.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); //更新值,先删除原来的key
                    mymap.insert(pair<int, int>(delk, tmp - 1)); //往map中新增k,v
                    it = 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 := 0
	map1 := 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] -= 1
				if 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://www.coloradmin.cn/o/1621381.html

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

相关文章

‍ 太空网络攻击

&#x1f9d1;‍&#x1f680; 尤里-加加林成为征服外太空的第一人。他在 1961 年 4 月 12 日的飞行有力地推动了全世界的科技发展。 有趣的事实是&#xff1a;苏联所有首次太空发射&#xff08;包括加加林的飞行&#xff09;的弹道计算都是在苏联第一个计算机中心的电子计算机…

Redis(六) Set集合类型

文章目录 前言命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结 内部编码使用场景 前言 集合类型也是保存多个字符串类型的元素的&#xff0c;和列表类型不同的是&#xff0c;set集合类型中的元素是无序的且…

Flink 实时数仓(一)【实时数仓离线数仓对比】

前言 昨天技术面的时候&#xff0c;面试官说人家公司现在用的都是最新的技术&#xff0c;比如 Doris 等一些最新的工具&#xff0c;确实这些课是学校永远不会开设的&#xff0c;好在他说去了会带着我做一做。可是 ...... 学院舍不得让走啊 ...... 没办法&#xff0c;情况就是这…

DelphiWebMVC对VUE导出包的支持

MVC框架除了本身对html文件的渲染输出&#xff0c;先开始对Hbuilder或VSCode 开发的VUE项目的导出包&#xff0c;开始支持导出包的部署。 这是一个Hbuilder 的vue 项目&#xff0c;导出包为&#xff1a; 这是一个DelphiWeb项目&#xff0c; 这是DelphiWeb项目的运行目录&#x…

企业有必要上人事档案信息管理系统吗

人事档案是企业的重要资产&#xff0c;其中包含着员工的基本信息、合同、培训记录、绩效评估、离职手续等重要内容。通过建立人事档案信息管理系统&#xff0c;企业可以实现以下几点好处&#xff1a; 1. 提高工作效率&#xff1a;人事档案管理系统可以实现信息的集中存储和快速…

C语言操作符和关键字

文章目录 操作符单目操作符sizeof&#xff08;类型&#xff09;强制类型转换 关系操作符、逻辑操作符、条件操作符逗号表达式 常见关键字typedefstaticstatic修饰局部变量static修饰全局变量static修饰函数 register寄存器关键词define定义常量和宏 操作符 单目操作符 C语言中…

Echarts异步数据与动画加载

目录 简介 头部代码 这段代码是使用 Echarts 绘制图表的关键部分。首先&#xff0c;初始化了一个 Echarts 实例。然后&#xff0c;通过 Ajax 请求获取数据&#xff0c;并基于此设置图表选项。其中包括颜色、背景色、标题、提示框、图例以及饼图的具体配置。 具体解释如下&a…

python ERA5 画水汽通量散度图地图:风速风向矢量图、叠加等高线、色彩分级、添加shp文件、添加位置点及备注

动机 有个同事吧&#xff0c;写论文&#xff0c;让我帮忙出个图&#xff0c;就写了个代码&#xff0c;然后我的博客好久没更新了&#xff0c;就顺便贴上来了&#xff01; 很多人感兴趣风速的箭头怎样画&#xff0c;可能这种图使用 NCL 非常容易&#xff0c;很多没用过代码的小…

「 网络安全常用术语解读 」软件物料清单SBOM详解

1. 概览 软件物料清单&#xff08;Software Bill of Materials&#xff0c;SBOM&#xff09;是软件成分信息的集合&#xff0c;SBOM文件中记录了软件产品或服务所使用组件、库、框架的清单&#xff0c;用于描述软件构建过程中使用的所有组件及其关系&#xff0c;以实现软件供应…

fatal: unable to access ‘https://github.com/alibaba/flutter_boost.git/

Git error. Command: git fetch stdout: stderr: fatal: unable to access ‘https://github.com/alibaba/flutter_boost.git/’: Failed to connect to github.com port 443 after 75005 ms: Couldn’t connect to server exit code: 128 GitHub (国际型)代码 分发平台/托管平…

人工智能中两个较为常见的评估模型性能指标(EVS、MAE)

1、解释方差(EVS) 官方社区链接&#xff1a;sklearn.metrics.explained_variance_score-scikit-learn中文社区 explained_variance_score是一个用于评估回归模型性能的指标&#xff0c;它衡量的是模型预测值与实际值之间关系的密切程度。具体来说&#xff0c;解释方差分数表示…

【Canvas与艺术】绘制铜质钢底24周年纪念章

【关键点】 底图的查找和多次尝试、文字描边。 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用HTML5/Canvas绘…

图像处理的基本操作

一、PyCharm中安装OpenCV模块 二、读取图像 1、基本语法 OpenCV提供了用于读取图像的imread()方法&#xff0c;其语法如下&#xff1a; image cv2.imread&#xff08;filename&#xff0c;flags&#xff09; &#xff08;1&#xff09;image&#xff1a;是imread方法的返回…

OpenCompass 大模型评测实战——笔记

OpenCompass 大模型评测实战——笔记 一、评测1.1、为什么要做评测1.2、如何通过能力评测促进模型发展1.2.1、面向未来拓展能力维度1.2.2、扎根通用能力1.2.3、高质量1.2.4、性能评测 1.3、评测的挑战1.3.1、全面性1.3.2、评测成本1.3.3、数据污染1.3.4、鲁棒性 二、OpenCompas…

MSE实现全链路灰度实践

技术架构包括以下基础设施和云服务&#xff1a; 1个地域&#xff1a;ACK集群、微服务应用、MSE实例均部署在同一地域下。 1个专有网络VPC&#xff1a;形成云上私有网络&#xff0c;确保核心云资源的网络环境&#xff0c;如容器服务ACK、微服务引擎MSE。 ACK集群&#xff1a;简单…

开曼群岛:Web3企业的乐园

开曼群岛&#xff1a;Web3企业的理想之地 开曼群岛&#xff0c;在数字革命中大放异彩。近年来&#xff0c;该地区成立的Web3企业数量显著增加&#xff0c;如果保持目前的发展速度&#xff0c;并持续优化立法&#xff0c;那么扩展的速度将无可限量。本文将探讨推动这一增长的关…

STL-vector的使用及其模拟实现

在C中&#xff0c;vector是标准模板库&#xff08;STL&#xff09;中的一种动态数组容器&#xff0c;它可以存储任意类型的元素&#xff0c;并且能够自动调整大小。vector提供了许多方便的成员函数&#xff0c;使得对数组的操作更加简单和高效。 vector的使用 vector的构造函数…

国密SSL证书在等保、关保、密评合规建设中的应用

在等保、关保、密评等合规建设中&#xff0c;网络和通信安全方面的建设是非常重要的部分&#xff0c;需要实现加密保护和安全认证&#xff0c;确保传输数据机密性、完整性以及通信主体可信认证。国密SSL证书应用于等保、关保和密评合规建设中&#xff0c;不仅能够提升网络信息系…

创建第一个Vue3项目时遇到的报错及处理

其实主要就是针对命令&#xff1a;npm init vuelatest 的报错处理 受限自己电脑本身已经安装了node&#xff0c;npm&#xff0c;在环境搭建时&#xff0c;遇到了报错&#xff0c;如下&#xff1a; 我以为是这是个很简单的问题&#xff0c;看起来是npm的版本过低&#xff0c;升…

测试用例设计方法-探索性测试

生活犹如骑单车&#xff0c;唯有前进才能保持平衡。大家好&#xff0c;今天给大家分享一下关于探索性测试的方法&#xff0c;在探索性测试中更加考验测试人员的经验&#xff0c;所以我们在平时的测试工作中一定要多记录、多总结、多复盘&#xff0c;对于经常出现的bug深究其根本…