2023-spring 2.探险营地 — 字符串

news2024/12/23 19:25:24
🍎道阻且长,行则将至。🍓

🌻算法,不如说它是一种思考方式🍀


算法专栏: 👉🏻123


一、🌱2023-spring 2.探险营地

  • 题目描述:探险家小扣的行动轨迹,都将保存在记录仪中。expeditions[i] 表示小扣第 i 次探险记录,用一个字符串数组表示。其中的每个「营地」由大小写字母组成,通过子串 -> 连接。
    例:"Leet->code->Campsite",表示到访了 “Leet”、“code”、“Campsite” 三个营地。
    expeditions[0] 包含了初始小扣已知的所有营地;对于之后的第 i 次探险(即 expeditions[i] 且 i > 0),如果记录中包含了之前均没出现的营地,则表示小扣 新发现 的营地。
    请你找出小扣发现新营地最多且索引最小的那次探险,并返回对应的记录索引。如果所有探险记录都没有发现新的营地,返回 -1

  • 来源:力扣(LeetCode)

  • 难度:中等

  • 注意:
    大小写不同的营地视为不同的营地;
    营地的名称长度均大于 0。

  • 示例 1:

输入:expeditions = ["leet->code","leet->code->Campsite->Leet","leet->code->leet->courier"]

输出:1

解释:
初始已知的所有营地为 “leet” 和 “code”

第 1 次,到访了 “leet”、“code”、“Campsite”、“Leet”,新发现营地 2 处:“Campsite”、“Leet”

第 2 次,到访了 “leet”、“code”、“courier”,新发现营地 1 处:“courier”

第 1 次探险发现的新营地数量最多,因此返回 1

  • 示例 2:

输入:expeditions = ["Alice->Dex","","Dex"]

输出:-1

解释:

初始已知的所有营地为 “Alice” 和 “Dex”

第 1 次,未到访任何营地;

第 2 次,到访了 “Dex”,未新发现营地;

因为两次探险均未发现新的营地,返回 -1

  • 示例 3:

输入:expeditions = ["","Gryffindor->Slytherin->Gryffindor","Hogwarts->Hufflepuff->Ravenclaw"]

输出:2

解释:

初始未发现任何营地;

第 1 次,到访 “Gryffindor”、“Slytherin” 营地,其中重复到访 “Gryffindor” 两次,
因此新发现营地为 2 处:“Gryffindor”、“Slytherin”

第 2 次,到访 “Hogwarts”、“Hufflepuff”、“Ravenclaw” 营地;
新发现营地 3 处:“Hogwarts”、“Hufflepuff”、“Ravenclaw”;

第 2 次探险发现的新营地数量最多,因此返回 2

🌴解题

字符串的处理

这个应该算是简单题,不过当时题看错了卡了好久~

最简单做法就是对字符串数组的每一个字符串进行拆分:找 - 或者 ->,字符串拆分加入到集合中 HashSet ,不会出现重复。
这里我们需要两个集合,一个集合 aSet 保存之前到访过的所有营地,另一个集合 bSet保存当前字符串所记录的到访的营地,看集合 aSet 中有没有集合 bSet 的元素,记为 k。于是这一次(第 i 次)的到访记录中新营地数 n 为:aSet 的大小 - k,当 n > num && n != 0 时就让 num=n,index = i (num初始赋值为 -1)。
按顺序遍历完最后返回最大新营地数的记录下标 index

class Solution {
    public int adventureCamp(String[] expeditions) {
        /**
         * 处理第一个
         */
        int ans=-1;// 最大新到访的个数
        // 拆解字符串到hashset
        Set<String> setstr0=new HashSet<>();
        int count0;

        if(expeditions[0].length()!=0){
            count0=1;
            for (int i = 0; i < expeditions[0].length(); i++) {
                if (expeditions[0].charAt(i) == '-')
                    count0++;
            }

            int bigen = 0, end;
            for (int i = 0; i < count0; i++) {//取出已知的营地
                end = bigen;
                while (end < expeditions[0].length() && expeditions[0].charAt(end) != '-') {
                    end++;
                }
                setstr0.add(expeditions[0].substring(bigen, end));
                bigen = end + 2;
            }
        }

        int index=10000;//记录下标最小
        for (int i = 1; i < expeditions.length; i++) {//看当前有几个 包含前面的
            /**
             * 处理第i个记录
             */
            if(expeditions[i].length()==0)
                continue;

            int countexp=1;//有多少个地方
            for (int j = 0; j < expeditions[i].length(); j++) {
                if (expeditions[i].charAt(j) == '-')
                    countexp++;
            }

            Set<String> setstr=new HashSet<>();

            int bigen = 0, end;
            for (int j = 0; j < countexp; j++) { //取出记录i到达的营地
                end = bigen;
                while (end < expeditions[i].length() && expeditions[i].charAt(end) != '-') {
                    end++;
                }
                setstr.add(expeditions[i].substring(bigen, end));
                bigen = end + 2;
            }

            //比较 setstr0  - setstr****************还要把 setstr的内容加入setstr0
            count0=setstr0.size();
            int countn=setstr.size();

            if(count0==0){//初始营地为空
                if(ans<countn){//当前 new到访记录更多
                    ans=countn;
                    index=i;
                }
            }else{
                int k=0;
                for (String s : setstr) {//看初始到访记录是否存在于当前到访记录
                    if(setstr0.contains(s))
                        k++;
                }

                if(countn-k <= 0)//当前new到访记录 0
                    continue;
                if(ans<countn-k){//当前 new到访记录更多
                    ans=countn-k;
                    index=i;
                }
            }

            setstr0.addAll(setstr);

        }
        if(index==10000)//不变,表示没新的到访地
            return -1;
        return index;
    }
}

过啦!

123

返回第一页。☝


☕物有本末,事有终始,知所先后。🍭

🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓

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

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

相关文章

SAM Segment Anything

https://arxiv.org/pdf/2304.02643v1.pdf 包含三个主题&#xff1a;Task、Model、Data Task&#xff08;任务&#xff09;&#xff1a; 需要定义一个 足够通用的图像分割任务&#xff0c;可以提供一个强大的预训练目标&#xff0c;并支持广泛的下游应用程序。 Model&#xf…

mybatis的参数处理详解

mybatis的参数处理详解 parameterType配置参数 1、参数的使用说明 使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型&#xff0c;引用类型&#xff08;例如:String 类型&#xff09;&#xff0c;还可以是实体类类型&#xff08;POJO 类&#xff09;。同时也…

C++学习:类和对象(上)

类和对象 这是C这样的面向对象的语言具有的特性&#xff0c;相较于C语言来说&#xff0c;更加方便的去编写代码&#xff0c;调用代码。 当需要大量重复的调用同一个函数的时候&#xff0c;我们每创建一个函数&#xff0c;就会建立一个栈帧&#xff0c;这样对于空间来讲不友好…

【南京大学PA】 PA0 环境配置 lab (vim | gcc | lab)

本文章学习NJU 的 PA 课程记的笔记 南大PAWLS空间管理 注意事项 whoami 指令 显示你当前的用户IDsudo whoami linux配置 cpp 环境 apt-get install build-essential # build-essential packages, include binary utilities, gcc, make, and so on apt-get install man …

高效办公——Excel表格-03篇(Excel常用快捷键 以及 Excel快捷键结合公式的各种常见的办公例子)

高效办公——Excel表格-03篇&#xff08;Excel常用快捷键 以及 Excel快捷键结合公式的各种常见的办公例子&#xff09; 1. commandE&#xff08;Windows系统&#xff1a;ctrlE&#xff09;——快速分列/重组2. 高效复制的快捷键2.1 command D&#xff08;快速复制上一单元格的…

面试篇:MySQL

一、如何定位慢查询 1、慢查询原因&#xff1a; 聚合查询多表查询表数据量过大查询深度分页查询 表现&#xff1a;页面加载慢、接口无响应&#xff0c;或者响应时间过长&#xff08;超过1s&#xff09; 2、如何定位慢查询 3、面试官&#xff1a;MySQL中&#xff0c;如何定…

Leetcode-day4【88】【167】【125】【345】

文章目录 88. 合并两个有序数组题目解题思路解题思路【学习】尾插入法 167. 两数之和 II - 输入有序数组题目解题思路 125. 验证回文串题目解题思路 345. 反转字符串中的元音字母题目解题思路 88. 合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums…

Nacos封装通用HttpClient

一、Nacos下Http请求设计众多处理模块处理&#xff0c;包括更新、Prometheus监控等众多功能&#xff0c;Nacos对这块做了统一封装&#xff0c;扩展性也很好&#xff0c;有新旧版本和同步和异步版本. 二、具体封装模块. 1、引入依赖如下. <dependency><groupId>co…

C++ STL学习之【反向迭代器】

✨个人主页&#xff1a; 夜 默 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 A year from now you may wish you had started today. 明年今日&#xff0c;你会希望此时此刻的自己已经开始行动了。 文章目录 &#x1f307;前言&a…

[持续更新]mac使用chatgpt的几种方法~

1. monica 使用edge浏览器或者chrome浏览器&#xff0c;直接在官网下载即可&#xff0c;网址直通&#xff1a; bing: https://www.microsoft.com/zh-cn/edge/download?formMA13FJ google&#xff1a; Google Chrome 网络浏览器 备注&#xff1a;你需要先搭上梯子哈 安装打…

【数据库多表操作】sql语句基础及进阶

常用数据库&#xff1a; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库&#xff0c;它是长期存储在计算机内、有组织、有结构的数据集合。数据库是信息系统的核心部分&#xff0c;现代软件系统中大量采用了数据库管理系统&#xff08;DBM…

Windows下 influxdb 数据库安装和简单使用

步骤 1&#xff1a;安装 InfluxDB 你可以从 InfluxDB 的 InfluxDB官网winndows二进制安装包下载适用于不同操作系统的 InfluxDB 安装包。在本教程中&#xff0c;我们将介绍在 Windows上安装 InfluxDB 的步骤。 如果所示&#xff0c;可以点击下载windows版本的安卓版&#xff…

VSCode编译器环境下,基于vite+vue调试Cesium

VSCode编译器环境下&#xff0c;基于vitevue调试Cesium 1.创建一个vite项目 以官网作为参考&#xff1a;创建项目 # npm 6.x npm create vitelatest my-vue-app --template vue# npm 7, extra double-dash is needed: npm create vitelatest my-vue-app -- --template vue#…

https页面加载http资源的解决方法

文章目录 1.报错如图2.项目背景3.网上的解决方案4.我的最终解决方案 1.报错如图 2.项目背景 我们的项目采用的全是https请求&#xff0c;而使用第三方文件管理器go-fastdfs&#xff0c;该文件管理器返回的所有下载文件的请求全是http开头的&#xff0c;比如http://10.110.38.25…

计算机组成原理/数据库补充 存储器第四章---虚拟内存

刚刚数据库下课讲了很多有关虚拟内存的东西感觉很多都忘了&#xff0c;现在写这篇文章来复习一下 为什么要引入虚拟内存 在计算机系统中&#xff0c;多个进程共享CPU和内存&#xff0c; 如果太多的进程需要过多的内存空间&#xff0c;那么其中一部分进程就会无法或得足够得空…

2023年网络安全比赛--Windows渗透测试中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.通过本地PC中渗透测试平台Kali对服务器场景20221219win进行系统服务及版本扫描渗透测试,并将该操作显示结果中1433端口对应的服务版本信息作为Flag值(例如3.1.4500)提交; 2.通过本地PC中渗透测试平台Kali对服务器场景202212…

chatgpt智能提效职场办公-ppt怎么全屏

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 在PowerPoint中&#xff0c;可以通过以下几种方法将演示文稿切换到全屏模式&#xff1a; 方法1&#xff1a;按F5键 在编辑演示文稿的状…

基于LS1028 TSN 交换机硬件系统设计与实现(二)

3.1 LS1028A 芯片研究 目前市面上支持 TSN 系统的芯片较少&#xff0c;其中两家较大的公司之一博通 &#xff08; Broadcom &#xff09; 2017 年推出了 StrataConnect BCM53570 系列的以太网交换机&#xff0c;该系 列支持的新技术旨在帮助用户应对物联网、汽车网络和…

mybatis的原理详解

mybatis的原理详解 原理图 执行的原理图如下图所示&#xff1a; 配置文件分析 config.xml: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.or…

PTA L1-091 程序员买包子 (10 分)

这是一条检测真正程序员的段子&#xff1a;假如你被家人要求下班顺路买十只包子&#xff0c;如果看到卖西瓜的&#xff0c;买一只。那么你会在什么情况下只买一只包子回家&#xff1f; 本题要求你考虑这个段子的通用版&#xff1a;假如你被要求下班顺路买 N N N 只包子&#x…