【LeetCode】2785. 將字符串中的元音字母排序

題目描述

題目鏈接
在這里插入圖片描述

問題分析

這道體的思路非常簡單和好理解,找出字符串中的元音字符,然后按照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;用戶對排…