题目描述

题目链接
在这里插入图片描述

问题分析

这道体的思路非常简单和好理解,找出字符串中的元音字符,然后按照ASSIC值进行排序,然后插入回对应的位置,解题步骤为:

  1. 使用一个set(可以快速查找的容器),建立元音字符集合
  2. 遍历整个字符串s,挨个匹配是否在set中,然后使用一个数组记录元音字符在字符串中的位置
  3. s中的对应位置的元素提取出来,按照ASSIC进行排序
  4. 挨个插入回字符串中

简单模拟的解法

class Solution {set<char> s_set={'A','E','I','O','U','a','e','i','o','u'};
public:string sortVowels(string s) {string S(s);//遍历字符串并查找元音字符的位置vector<int> v;for(int i=0;i<S.size();i++){if(s_set.find(S[i])!=s_set.end()){v.push_back(i);}}if(v.size()<=1) return s;        vector<int> v_copy(v);//提取元婴字符,进行排序sort(v.begin(),v.end(),[S](int a,int b){return S[a] < S[b];});//插入回字符串中对应的位置string ret(s);for(int i=0;i<v.size();i++){ret[v_copy[i]] = s[v[i]];}return ret;}
};

这个代码可以跑通大部分的测试用例2214 / 2216,但是在字符串超长的时候就会超时,所以需要进行优化

优化后

因为总共就10个元音字符(大小写),可以使用一个数组或者map记录每个字符在字符串中出现的次数。(数组的话就需要消耗58个单元,map需要消耗10个单元)

int v[58]={0};//根据ASSIC码表的顺序,ch-'A'
unordered_map<char,int> s_set={{'A',0},{'E',0},{'I',0},{'O',0},{'U',0},{'a',0},{'e',0},{'i',0},{'o',0},{'u',0}};

然后使用一个只读的数组或者字符串,来设置好元音字符的顺序,也就是待会插入元音字符的顺序,根据ASSIC码值

vector<char> sv = {'A','E','I','O','U','a','e','i','o','u'};
  1. 挨个遍历字符串s,统计出元音字符出现的次数(不能少),同时可以统计出现的位置(也可以不统计,在第4步直接从头遍历并判断,统计是为了优化第四步的时间)
  2. 对于排序元音字符,通过设置sv也已经做好
  3. 使用一个index(作为一个双指针),挨个遍历到需要插入的元音字符(统计次数不为0)
  4. 挨个遍历到s中元音字符的位置,然后使用Index按顺序插入元音字符
class Solution {unordered_map<char,int> s_set={{'A',0},{'E',0},{'I',0},{'O',0},{'U',0},{'a',0},{'e',0},{'i',0},{'o',0},{'u',0}};vector<char> sv = {'A','E','I','O','U','a','e','i','o','u'};
public:string sortVowels(string s) {vector<int> v;int i=0;for(auto& e: s){if(s_set.find(e)!=s_set.end()){s_set[e] +=1;v.push_back(i);}i++;}if(v.size()<=1) return s; int index = 0;for(auto& e:sv)//最多遍历9次{if(s_set[e] > 0){break;}index++;}for(int i=0;i<v.size();i++){s[v[i]] = sv[index];s_set[sv[index]]--;while(index < sv.size()&&s_set[sv[index]]<=0){index++;}}return s;}
};

该问题,主要是需要优化不必要的耗时,思路并不难

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3 步发 10 亿邮件,这个 GitHub 开源项目牛逼。

你是否要经常批量发邮件&#xff1f;无论是向客户推送最新资讯、产品营销&#xff0c;还是发送日常常规通知类邮件。使用第三方邮件服务平台不仅成本高昂&#xff0c;功能限制多&#xff0c;而且可能无法保证隐私和安全。现在&#xff0c;有一个完全开源、能自己部署的解决方案…

【计算机网络】DNS 解析 DNS 污染

1. DNS 解析&#xff08;工作流程、参与方与缓存&#xff09; DNS 的目标&#xff1a;把人类可读的域名&#xff08;如 www.example.com&#xff09;映射为 IP 地址&#xff08;如 93.184.216.34&#xff09;。 典型解析流程&#xff08;递归解析器 迭代查询&#xff09;&…

用住宿楼模型彻底理解Kubernetes架构(运行原理视角)

导读&#xff1a;从楼宇建设到租客入住的全流程想象我们正在建设一栋巨型智能住宿楼&#xff0c;从基础设施搭建到租客入住管理&#xff0c;每个环节都对应Kubernetes的组件和概念。本文将按运行原理的先后顺序&#xff0c;系统解析Kubernetes的23个核心组件与基本概念。把 Kub…

嘉银科技基于阿里云 Kafka Serverless 提升业务弹性能力,节省成本超过 20%

作者&#xff1a;四牛 前言 云消息队列 Kafka 版 Serverless 系列凭借其秒级弹性扩展、按需付费、轻运维的优势&#xff0c;助力嘉银科技业务系统实现灵活扩缩容&#xff0c;在业务效率和成本优化上持续取得突破&#xff0c;保证服务的敏捷性和稳定性&#xff0c;并节省超过 20…

RTOS 任务状态与调度机制详解

一、任务状态概述在实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;任务通常具有以下几种基本状态&#xff1a;Running&#xff08;运行态&#xff09;&#xff1a;任务正在 CPU 上实际执行。单核系统中同一时刻最多只有一个任务处于运行态。Ready&#xff08;就绪态&…

TDengine 特殊选择函数 UNIQUE 用户手册

UNIQUE 函数用户手册 函数定义 UNIQUE(expr)功能说明 UNIQUE() 函数返回指定列去重后的值&#xff0c;功能类似于 SQL 中的 DISTINCT 关键字。对于相同的数据值&#xff0c;UNIQUE 函数会返回时间戳最小的那一条记录。该函数会跳过 NULL 值。 版本要求 最低版本: v3.0.0.0…

新零售第一阶段传统零售商的困境突破与二次增长路径:基于定制开发开源AI智能名片S2B2C商城小程序的实践探索

摘要&#xff1a;新零售第一阶段&#xff0c;传统零售商面临同质化竞争、用户消费意愿低迷、线上电商分流等核心困境。本文以定制开发开源AI智能名片S2B2C商城小程序为切入点&#xff0c;结合阿里巴巴、某知名连锁零售企业等实践案例&#xff0c;分析其通过“AI智能推荐供应链协…

Spark SQL 之 Join Reorder

参考链接 https://www.cnblogs.com/fxjwind/p/14768975.html join Reorder src/main/scala/org/apache/spark/sql/catalyst/optimizer/CostBasedJoinReorder.scala private def reorder(plan: LogicalPlan, output: Seq[Attribute]): LogicalPlan = {<

牛客周赛 Round 109

比赛链接&#xff1a;牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A-小红的直角三角形_牛客周赛 Round 109 签到题&#xff1a;用勾股定理即可通过此题&#xff08;需要注意对共线情况的判断&#xff09; 代码&#xff1a; // Problem: 小红的直角三角…

[deepseek]LNK2001错误即单独编译汇编并链接

方案一&#xff1a;使用预编译的 .obj 文件&#xff08;最简单&#xff09; 如果汇编代码不常改动&#xff0c;这是最省事的方法。手动编译一次&#xff1a; 打开命令行&#xff0c;切换到 spoof.asm 所在目录。使用你已有的汇编器&#xff08;或者下载一个单独的 MASM 版本&am…

php学习 (第六天)

虚拟主机 一.什么是虚拟主机&#xff1f; 1.1 概念虚拟主机&#xff08;Web Hosting&#xff09;英文&#xff1a;Web Hosting / Shared Hosting核心概念&#xff1a; 一台服务器被切分给多个用户&#xff0c;每个人只使用服务器的一部分资源&#xff08;CPU、内存、带宽、存储…

AcousticsML声学机器学习翻译教程二(特征提取Feature Etraction)

源自&#xff1a;https://github.com/RAMshades/AcousticsM 特征提取 特征是可测量的属性&#xff0c;作为系统的输入。这些输入与特定数据样本相关&#xff0c;机器学习模型可通过解读这些特征来提供预测。特征通常具有独立性&#xff0c;并能提供样本的具体细节。音频特征示例…

【论文阅读】Beyond Text: Frozen Large Language Models in Visual Signal Comprehension

本论文研究了能否利用一个“冻结”的LLM&#xff0c;直接理解视觉信号&#xff08;即图片&#xff09;&#xff0c;而不用在多模态数据集上进行微调。核心思想是把图片看作一种“语言实体”&#xff0c;把图片转换成一组离散词汇&#xff0c;这些词汇来自LLM自己的词表。为此&a…

The Oxford-IIIT宠物图像识别数据集(753M)

0、引言博主研究生期间做的是人工智能领域相关的深度学习模型研究&#xff0c;早期还没定题的时候调研了大量方向。众所周知&#xff0c;模型性能的好坏很大程度上依赖于数据集&#xff0c;因此我当时也接触了大量数据集&#xff0c;这阵子将这些数据集汇总整理了一下&#xff…

jdbc DAO封装及BaseDAO工具类

DAO概念 DAO&#xff1a;Data Access Object&#xff0c;数据访问对象。 Java是面向对象语言&#xff0c;数据在Java中通常以对象的形式存在。一张表对应一个实体类&#xff0c;一张表的操作对应一个DAO对象&#xff01; 在Java操作数据库时&#xff0c;我们会将对同一张表的增…

大模型应用开发2-SpringAI实战

SpringAI整合了大多数大模型&#xff0c;而且对于大模型开发的三种技术架构都有比较好的封装和支持&#xff0c;开发起来非常方便。不同的模型能够接收的输入类型、输出类型不一定相同。SpringAI根据模型的输入和输出类型不同对模型进行了分类&#xff1a; 大模型应用开发大多…

TDengine 时序函数 DIFF 用户手册

DIFF 函数用户手册 函数概述 DIFF 函数用于计算数据列中相邻两行数据的差值&#xff0c;通常用于分析数据的变化趋势和增量。该函数特别适用于监控智能电表数据的变化模式。 语法 SELECT DIFF(column_name [, ignore_negative]) FROM table_name;参数说明 column_name: 数…

清除gradle缓存的某个依赖

要清除 Gradle 缓存中的某个特定依赖&#xff0c;可以按照以下步骤操作&#xff1a;找到依赖在缓存中的路径 Gradle 缓存的默认位置&#xff1a; Windows: C:\Users\<用户名>\.gradle\caches\modules-2\files-2.1 macOS/Linux: ~/.gradle/caches/modules-2/files-2.1 路径…

机器人控制器开发(驱动层——伺服驱动canopen的sdo和pdo)

文章总览 一、核心区别&#xff1a;一句话概括 • ​​SDO&#xff08;服务数据对象&#xff09;​​&#xff1a;像 ​​“问询/设置”​​。用于​​点对点、非周期​​的参数配置和读取。例如&#xff0c;设置电机增益、读取当前位置等。​​速度慢&#xff0c;但确保数据准…

返利APP排行榜数据实时更新:基于 WebSocket 与 Redis 的高并发数据推送技术

返利APP排行榜数据实时更新&#xff1a;基于 WebSocket 与 Redis 的高并发数据推送技术 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在返利APP运营中&#xff0c;用户对排…