Leetcode-2810-故障键盘-c++

news2024/11/27 16:37:52

题目详见https://leetcode.cn/problems/faulty-keyboard/

题解

这道题的关键是如何合理地使用STL,毕竟是一道简单题。

  • 之前常用到的Vector容器是单向开口的连续内存空间

  • deque则是一种双向开口的连续线性空间,又称双端动态数组。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受

然而!他效率再差,也比我们自己实现一个字符串反转函数快并且简单。

这里再附上题解下面别人的一个题解,我觉得挺有意思

class Solution {
public:
    string finalString(string s) {
    	// 这里是我认为特别好的一个想法:
    	// 最终字符串的长度就等于原字符串的长度 减去 字母‘i’的个数。
        int n = s.size(), cnt = count(s.begin(), s.end(), 'i');
        string ret(n - cnt, ' ');	// 这里直接根据最后的长度开出string
        for(int i = 0, j = n - cnt - 1, p = n - 1, back = true; p >= 0; --p){
        // i是头(左)指针,j是尾(右)指针,p是从!!!右到左!!!遍历原string的指针
            if(s[p] == 'i') {back = !back; continue;}	// 是i跳过
            if(back) ret[j--] = s[p];	// 见下图
            else ret[i++] = s[p];	// 见下图
        }
        return ret;
    }
};
  • 浅画个图,从右到左:
  • 遇到第一个i之前(共遇到0个i,为偶数个),的不需要反转,因此从右到左遍历,从右到左输入,得到正序
  • 遇到第二个i之前(共遇到1个i,为奇数个),此时需要进行反转 ,因此从右到左遍历,从左到右输入,得到倒序
  • 遇到第二个i之后到遇到第三个i之前(共遇到2个i,为偶数个),此时不需要反转(蓝色部分,不是很蓝,见谅)
  • 简单理解为:偶数次反转相互抵消

在这里插入图片描述

官方题解比较简单

class Solution {
public:
    string finalString(string s) {
        deque<char> q;
        bool head = false;
        for (char ch: s) {
            if (ch != 'i') {
                if (head) {
                    q.push_front(ch);
                }
                else {
                    q.push_back(ch);
                }
            }
            else {
                head = !head;
            }
        }
        string ans = (head ? string{q.rbegin(), q.rend()} : string{q.begin(), q.end()});
        return ans;
    }
};

笔者也在新手学习期中,所写的内容主要与大家交流学习使用,如有发现任何问题敬请指正!

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

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

相关文章

RAG已死,Gemini当立!AI技术革新带来颠覆性变革

简单的RAG系统可能即将被淘汰&#xff0c;但更个性化的版本将继续存在。 我最近在深入研究Genimi 1.5 Pro&#xff0c;作为一名AI领域的创业者&#xff0c;我有一些见解想要与你分享。 RAG是一种搜索技术&#xff0c;它通过比较信息的相似度来检索所需内容。 鉴于RAG主要用于…

【SQL Server】2. 将数据导入导出到Excel表格当中

最开始&#xff0c;博主介绍一下自己的环境&#xff1a;SQL Sever 2008 R2 SQL Sever 大致都差不多 1. 通过自带软件的方式 首先找到下载SQL Sever中提供的导入导出工具 如果开始界面没有找到自己下载的路径 C:\Program Files\Microsoft SQL Server\100\DTS\Binn下的DTSWiz…

投资回收期

投资回收期 利率与贴现率 贴现率是指将未来支付改变为现值所使用的利率&#xff0c;简单而言&#xff0c;就是将来的钱折算到现值&#xff0c;少掉或多出的那部分钱与将来的钱的比值。 利率是指一定时期内利息额与本金的比率&#xff0c;通常以一年期利息与本金…

testbench中一些常用的系统命令

前言 记录一下自己仿真过程中用到过的一些用于testbench的系统命令&#xff0c;根据自己用到的情况不定时进行补充。 文件操作 $fopen 用于打开文件的命令&#xff0c;格式如下 file $fopen("file_name","mode") file_name&#xff1a;要打开的文件…

CTK插件框架学习-事件监听(04)

CTK插件框架学习-插件注册调用(03)https://mp.csdn.net/mp_blog/creation/editor/136989802 一、主要流程 发送者注册消息事件接收者订阅消息事件接收者相应消息事件 事件监听比插件接口调用耦合性更弱&#xff0c;事件由框架维护&#xff0c;不需要指定发送方和接收方 二、…

“创新强基·应用强链”2024第104届上海电子展会

2024第104届上海电子展会 2024 Shanghai electron Expo 时间:2024年11月18--20日 地点:上海新国际博览中心 主题:创新强基应用强链 上海与长三角各地产业协同发展&#xff0c;到2025年&#xff0c;初步建成具有全球影响力和竞争力的世界级电子信息产业集群。产业链稳定性和韧…

如何在Facebook直播?手把手教你进行Facebook Live!

做跨境电商和外贸的朋友们&#xff0c;你们有试过用直播来卖货吗&#xff1f;现在有很多海外直播带货平台&#xff0c;像TikTok、YouTube等平台就受到许多卖家青睐。但是&#xff0c;作为社媒营销主阵地之一的 Facebook&#xff0c;它的直播功能 Facebook Live 却常常被许多卖家…

全氟化合物的变异系数

采用变异系数&#xff08;the coefficient of variation&#xff1b;CV&#xff09;来评价PFAAs的离散程度[1]。CV≤10%表示弱变异水平&#xff0c;10% < CV≤100%表示培养中等变异&#xff0c;CV > 100%表示强变异。CV的计算方法如下&#xff1a; 其中&#xff0c;s为标…

python爬虫----了解爬虫(十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

【云服务选购指南】4月 阿里云99续费统计 集体降价20% 京东云全网保价 博客建站 游戏服务器 2-64G大盘点

本文纯原创&#xff0c;侵权必究 【云服务器推荐】价格对比&#xff01;阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】2024年-幻兽帕鲁服务器…

computed计算属性、watch侦听器、生命周期

计算属性 点击查看 Vue文档 基础语法 多次使用计算属性&#xff0c;计算属性方法也只执行一次&#xff0c; 调用计算属性的方法不能加() 直接修改计算数学的值 计算属性不能通过双向绑定修改&#xff08;默认不能改&#xff09; 想要修改计算属性&#xff0c;就必须使用计…

如何防止亚马逊账户关联问题?

亚马逊风险控制是亚马逊为了防止买家账户欺诈而实施的规则。具体的风险控制算法是亚马逊技术部门的少数人所独有的&#xff0c;因此我们难以获知其中的细节。为了提高销量&#xff0c;一些卖家可能会采取一些措施&#xff0c;但是由于风控措施的严格&#xff0c;许多卖家深感头…

使用CMake搭建简单的Qt程序

目录结构 代码 CMakeLists.txt&#xff1a; cmake_minimum_required(VERSION 3.15)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)# set the project name project(xxx)# 设置Qt的路径 # 例如 E:/Qt/Qt/aaa/msvc2019_64 # aaa 为Qt的版本号 set(QT_PATH…

如何生成一个指定长度的空数组?

简便写法&#xff1a;使用constructor构造函数进行创建&#xff0c;第一个空数组 [ ] 表示创建一个空数组&#xff0c;然后调用 constructor 属性并传入参数指定数组长度。 [].constructor(17)可用于遍历&#xff0c;例如使用ngFor进行单纯的遍历&#xff0c;参数为遍历次数。

常见的设备通讯协议分析

不同的通信协议根据其设计目的和应用场景&#xff0c;各有其优缺点。在选择通信协议时&#xff0c;需要根据具体的应用需求和场景&#xff0c;权衡各种协议的优缺点&#xff0c;选择最适合的协议。例如&#xff0c;对于实时性要求高的工业控制系统&#xff0c;可能会选择CAN或M…

GWO-CNN-BiLSTM多输入时序预测|灰狼群算法优化的卷积-双向长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(49)

1. 题目解析 题目链接&#xff1a;63. 不同路径 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题就像是在一个迷宫中找路&#xff0c;只不过这个迷宫有些格子是不能走的&#xff0c;也就是那些“障碍物”。…

简单几步轻松实现电脑快速切换IP地址

在数字化时代&#xff0c;网络已经成为我们日常生活和工作中不可或缺的一部分。IP地址作为网络设备的标识符&#xff0c;扮演着至关重要的角色。然而&#xff0c;在某些特定场景下&#xff0c;我们可能需要快速切换IP地址&#xff0c;以满足不同的网络需求或保护个人隐私。虎观…

算法基础--递归

&#x1f600;前言 递归是一种重要的算法思想&#xff0c;常用于解决问题的分解与求解。在计算机科学中&#xff0c;递归是指一个函数在其定义中调用自身的情况。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 算法基础--递归递归入门例题递归实现指数型枚举递归实现排…

gulp的基本使用(一)

gulp的基本使用 开始全局安装gulp-cli本地项目初始化gulp插件的安装查看是否安装成功项目根目录创建gulpfile.js文件运行命令测试结果 开始 全局安装gulp-cli 命令 npm install --global gulp-cligulp-cli作用&#xff1a; gulp的命令行工具&#xff0c;它需要全局安装&…