计算机创新协会冬令营——暴力枚举题目01

news2024/11/16 9:55:10

首先是欢迎大家参加此次的冬令营,我们协会欢迎所有志同道合的同学们。话不多说,先来看看今天的题目吧。

题目

力扣题号:2351. 第一个出现两次的字母

注:下述题目和示例均来自力扣

题目

给你一个由小写英文字母组成的字符串 s ,请你找出并返回第一个出现 两次 的字母。

注意

  • 如果 a 的 第二次 出现比 b 的 第二次 出现在字符串中的位置更靠前,则认为字母 a 在字母 b 之前出现两次。
  • s 包含至少一个出现两次的字母。

示例

示例 1:

输入:s = "abccbaacz"
输出:"c"
解释:
字母 'a' 在下标 0 、5 和 6 处出现。
字母 'b' 在下标 1 和 4 处出现。
字母 'c' 在下标 2 、3 和 7 处出现。
字母 'z' 在下标 8 处出现。
字母 'c' 是第一个出现两次的字母,因为在所有字母中,'c' 第二次出现的下标是最小的。

示例 2:

输入:s = "abcdd"
输出:"d"
解释:
只有字母 'd' 出现两次,所以返回 'd' 。t

提示 

  • 2 <= s.length <= 100
  • s 由小写英文字母组成
  • s 包含至少一个重复字母

Java题解一:直接暴力

给了一个小写英文字母组成的字符串s,找出第一个出现两次的字母,并且可以在注意中看见,如果a的第二次比b的第二次位置更靠前,就认为a在b之前先出现,那么就需要一个信号位置来判断。代码如下,注释很详细

class Solution {
    public char repeatedCharacter(String s) {
        // 在java中字符串不好操作,先转换成字符数组
        char[] charS = s.toCharArray();
        // 由于第二个字母先出现的才算真正的先出现所以这里记录一下
        char res = 'A';
        int position = Integer.MAX_VALUE;
        for (int i = 0; i < charS.length; i++) {
            for (int j = i + 1; j < charS.length; j++) {
                if (charS[i] == charS[j] && j < position) {
                    res = charS[i];
                    position = j;
                }
            }
        }
        return res;
    }
}

暴力就是很慢┭┮﹏┭┮


如果采用数组进行优化呢?

直接记录每一个字母出现了多少次,达到了两次的要求之后直接返回即可。

Java题解二:数组解法

class Solution {
    public char repeatedCharacter(String s) {
        // 在java中字符串不好操作,先转换成字符数组
        char[] charS = s.toCharArray();
        // 这里定义一个长度为26的数组,代表a-z
        // ASCII码表都知道吧,通过这个转化的 a 是 97
        int[] ans = new int[26];
        for (int i = 0; i < charS.length; i++) {
            int position = charS[i] - 'a';
            if (ans[position] == 0){
                ans[position]++;
            }else if (ans[position] == 1){
                // 这里已经等于1了,那么这次再+就是2
                // 是它!!1出现了我的目标字母@!!!
                return charS[i];
            }
        }
        // 由于题目的条件可以看出这里其实不会有没有两次出现的情况
        // 如果有,根据题目要求来即可比如返回-1啥的,我这里就随意返回了
        return 'A';
    }
}

直接打败全世界的人!!


其他语言同步,我就只提供优化的方法了,暴力java的应该也能看懂

C++

class Solution {
public:
    char repeatedCharacter(string s) {
        // 将字符串转换为字符数组
        std::vector<char> charS(s.begin(), s.end());

        // 定义一个长度为26的数组,代表a-z
        // 'a'的ASCII码是97
        std::vector<int> ans(26, 0);

        for (int i = 0; i < charS.size(); i++) {
            int position = charS[i] - 'a';
            if (ans[position] == 0) {
                ans[position]++;
            } else if (ans[position] == 1) {
                // 已经等于1,表示找到目标字符
                return charS[i];
            }
        }

        // 如果没有找到重复字符,则返回默认字符
        return 'F';
    }
};

 Python3

class Solution:
    def repeatedCharacter(self, s: str) -> str:
        # 将字符串转换为字符列表
        charS = list(s)

        # 定义一个长度为26的数组,代表a-z
        # 'a'的ASCII码是97
        ans = [0] * 26

        for char in charS:
            position = ord(char) - ord('a')
            if ans[position] == 0:
                ans[position] += 1
            elif ans[position] == 1:
                # 已经等于1,表示找到目标字符
                return char

        # 如果没有找到重复字符,则返回默认字符
        return 'F'


结语

虽然我们这道题是一个暴力枚举的题目,但是一般能够暴力的题目都有优化的空间,大家可以好好理解一下。

ヾ( ̄▽ ̄)Bye~Bye~

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

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

相关文章

(ros2)控制gazebo移动的话题:

gazebo并不是ros2内自带的&#xff0c;是一个独立的软件&#xff0c;需要安装ros_gz功能被把ros2消息转换为gazebo可以识别的命令&#xff0c;并且把gazebo状态转换为ros2信息&#xff0c;所以可以认为ros_gz_bridge节点就是gazebo&#xff0c; 这个节点只接收2个话题&#xf…

Yarn的安装与使用详细介绍

什么是yarn Apache Hadoop YARN &#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09;是一种新的 Hadoop 资源管理器&#xff0c;它是一个通用资源管理系统&#xff0c;可为上层应用提供统一的资源管理和调度&#xff0c;它的引入为集群在利用…

2024年天津仁爱学院专升本专业课考试考场安排及准考证打印的通知

天津仁爱学院2024年高职升本科专业课考试通知 一、考试科目及时间 天津仁爱学院2024年高职升本科专业课考试定于2024年1月9日9&#xff1a;00-14&#xff1a;00举行。考试地点&#xff1a;天津市静海区团泊新城博学苑&#xff0c;天津仁爱学院。具体考试科目时间安排如下表&a…

提高工作效率的Postman环境变量使用方法

在 Postman 中&#xff0c;用 Environments 来管理环境变量。我们在开发的过程中&#xff0c;往往会用到多个环境&#xff1a;开发环境&#xff0c;测试环境&#xff0c;UAT 环境&#xff0c;生产环境等。我们要调用不同环境的 API 时&#xff0c;只需切换 Postman 的 Environm…

ISP 基础知识积累

Amber&#xff1a;现有工作必要的技术补充&#xff0c;认识需要不断深入&#xff0c;这个文档后续还会增加内容进行完善。 镜头成像资料 ——干货满满&#xff0c;看懂了这四篇文章&#xff0c;下面的问题基本都能解答 看完思考 1、ISP 是什么&#xff0c;有什么作用&#xff…

php安装扩展event 提示 No package ‘openssl‘ found 解决方法

在使用pecl编译安装最新版event模块的时候提示 No package openssl found , 可是本机是安装了openssl的, 编译时找不到, 大概率就是环境配置的问题了, 增加 OPENSSL_CFLAGS OPENSSL_LIBS环境变量即可解决. 异常提示信息: checking for openssl > 1.0.2... no configure: …

【数据库原理】(5)关系数据库的关系数据结构

关系及相关概念 在关系模型中,无论是实体还是实体之间的联系均由关系(二维表)来表示。 1.域&#xff08;Domain&#xff09; 定义&#xff1a;域是一组具有相同数据类型的值的集合。例子&#xff1a;实数集合、整数集合、英文字母集合等。 2.笛卡儿积&#xff08;Cartesian…

学习Vue单文件组件总结

今天主要学习了组件实例对象的一个重要内置关系和单文件组件。先说一下实例对象的内置关系&#xff0c;在这里要对JS中的原型链有一定的基础&#xff0c;Vue构造函数的prototype原型指向的是Vue的原型对象&#xff0c;new出来的Vue实例对__proto__同样指向的是Vue的原型对象&am…

Hex 文件类型字段详解

文章目录 地址类型字段详解02&#xff08;扩展段地址记录&#xff09;&#xff1a;指定后续数据记录的向左移动4位后开始计算地址04&#xff08;扩展线性地址记录&#xff09;&#xff1a;指定后续数据记录的起始地址的高16位 地址类型字段详解 02&#xff08;扩展段地址记录&…

18、BLIP

简介 github BLIP提出了一种基于预训练的方法&#xff0c;通过联合训练视觉和语言模型来提升多模态任务的性能。 BLIP(Bootstrapping Language-Image Pretraining)是salesforce在2022年提出的多模态框架&#xff0c;是理解和生成的统一&#xff0c;引入了跨模态的编码器和解码…

RocketMQ5.0延时消息时间轮算法

前言 RocketMQ 相较于其它消息队列产品的一个特性是支持延时消息&#xff0c;也就是说消息发送到 Broker 不会立马投递给消费者&#xff0c;要等待一个指定的延迟时间再投递&#xff0c;适用场景例如&#xff1a;下单后多长时间没付款系统自动关闭订单。 RocketMQ 4.x 版本的延…

【LeetCode-剑指offer】-- 9.乘积小于K的子数组

9.乘积小于K的子数组 方法&#xff1a;滑动窗口 关于为什么子数组数目为j-11。这时候就要理解采用滑动窗口的思路其实是枚举子数组的右端点&#xff0c;然后来找到满足条件的最小左端点。也即当得到满足条件的窗口时&#xff0c;就意味着得到了以 j 作为右端点时满足条件的左端…

框架的灵魂之笔-反射

反射&#xff1a;框架的灵魂 类加载器 概述&#xff1a;当程序要使用某个类的时候&#xff0c;如果该类还未被加载到内存中&#xff0c;则系统会通过以下三个步骤 ①类的加载 ②类的连接 ③类的初始化来对类进行初始化。如果不出现意外情况&#xff0c;JVM将会连续完成这三个步…

momentjs计算两个时间差返回时分秒

// 导入 Moment.js 模块 const moment require(moment);// 定义起始时间和结束时间 const startTime 2021-09-30T14:30:00; // 格式必须符合 ISO8601&#xff08;YYYY-MM-DDTHH:mm:ss&#xff09; const endTime 2021-09-30T15:45:00;// 创建 Moment.js 对象来表示起始时间和…

CentOS 7 实战指南:文本处理命令详解

前言 在Linux系统中&#xff0c;文本处理是非常基础却又必不可少的一项技能。如果你正在使用CentOS系统&#xff0c;那么学会如何利用文本操作命令来高效地处理文本文件无疑将会是一个强有力的工具。 本篇文章将介绍一些最常用和最实用的文本操作命令&#xff0c;并通过详尽的…

如何自动生成 API 接口文档 - 一份详细指南

本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码。好处简单总结有以下几点&#xff1a; 自动生成接口文档&#xff1a; 不用手写&#xff0c;一键点击就可以自动生成文档&#xff0c;当有更新时&#xff0c;点击一下就可以自动同步接口文档&#xff1b;代码…

金和OA UserWebControl.UserSelect.ashx 信息泄露漏洞

产品简介 金和网络是专业信息化服务商&#xff0c;为城市监管部门提供了互联网监管解决方案&#xff0c;为企事业单位提供组织协同OA系统升开发平台&#xff0c;电子政务一体化平台智慧电商平合等服务 漏洞概述 金和OA UserWebControl.UserSelect.AjaxServiceMethod,UserWeb…

秋招复习之迭代与递归

目录 前言 递归 1. 调用栈 2. 尾递归 3. 递归树 总结 前言 复习中ing&#xff0c;递归我总是迷迷糊糊的&#xff0c;这里有点醍醐灌顶。迭代是自下而上&#xff0c;从最基础的步骤开始&#xff0c;然后不断重复或累加这些步骤&#xff0c;直到任务完成。递归是自上而下&…

共识算法介绍

文章目录 共识算法Paxos 算法三种角色一致性提交算法prepare 阶段accept 阶段commit 阶段 CAP 定理BASE 理论Zookeeper 算法实现三类角色三个数据三种模式四种状态消息广播算法Leader选举算法 共识算法 Paxos 算法 Paxos 算法是莱斯利兰伯特(Leslie Lamport)1990 年提出的一种…

精彩回顾 I DatenLord Hackathon 2023圆满结束!

DatenLord Hackathon 2023已经顺利完赛。达坦科技基于其跨云分布式文件系统DatenLord项目&#xff0c;结合AI大模型时代背景&#xff0c;搭建了擂台。我们邀请参赛者为DatenLord的极端场景设计并实现缓存 p2p 传输和同步模块。 本届赛题为“Explore the Possibilities”&#…