leetcode - 字符串

字符串

466. 統計重復個數

題目

定義 str = [s, n] 表示 strn 個字符串 s 連接構成。

  • 例如,str == ["abc", 3] =="abcabcabc"

如果可以從 s2( )中刪除某些字符使其變為 s1,則稱字符串 s1( )可以從字符串 s2 獲得。

  • 例如,根據定義,s1 = "abc" 可以從 s2 = "abdbec" 獲得,僅需要刪除加粗且用斜體標識的字符。

現在給你兩個字符串 s1s2 和兩個整數 n1n2 。由此構造得到兩個字符串,其中 str1 = [s1, n1]str2 = [s2, n2]
請你找出一個最大整數 m ,以滿足 str = [str2, m] 可以從 str1 獲得。

示例 1:
輸入: s1 = “acb”, n1 = 4, s2 = “ab”, n2 = 2 輸出: 2
示例 2:
輸入: s1 = “acb”, n1 = 1, s2 = “acb”, n2 = 1 輸出: 1

提示:

  • 1 <= s1.length, s2.length <= 100

  • s1s2 由小寫英文字母組成

  • 1 <= n1, n2 <= 10(6)

題解
/*** @param {string} s1* @param {number} n1* @param {string} s2* @param {number} n2* @return {number}*/
var getMaxRepetitions = function (s1, n1, s2, n2) {let indexMap = new Map();let countS1 = 0,countS2 = 0;let s2p = 0;while (countS1 < n1) {let prev = indexMap.get(s2p);if (!prev) {indexMap.set(s2p, [countS1, countS2]);} else {// 循環節 下一個s1 對應的 s2p 索引有相同時// 循環節循環的次數 向下取整let t = ((n1 - prev[0]) / (countS1 - prev[0])) | 0;countS2 = prev[1] + t * (countS2 - prev[1]);countS1 = prev[0] + t * (countS1 - prev[0]);// 清楚之前的循環記錄indexMap.clear();// 整除if (countS1 === n1) break;}// 循環s1for (let i = 0; i < s1.length; i++) {if (s1[i] === s2[s2p]) {s2p++;if (s2p === s2.length) {s2p = 0;countS2++;}}}countS1++;}return (countS2 / n2) | 0;
};

514. 自由之路

題目

電子游戲“輻射4”中,任務 “通向自由” 要求玩家到達名為 “Freedom Trail Ring” 的金屬表盤,并使用表盤拼寫特定關鍵詞才能開門。
給定一個字符串 ring ,表示刻在外環上的編碼;給定另一個字符串 key ,表示需要拼寫的關鍵詞。您需要算出能夠拼寫關鍵詞中所有字符的最少步數。
最初,ring 的第一個字符與 12:00 方向對齊。您需要順時針或逆時針旋轉 ring 以使 key 的一個字符在 12:00 方向對齊,然后按下中心按鈕,以此逐個拼寫完 key 中的所有字符。
旋轉 ring 拼出 key 字符 key[i] 的階段中:

  1. 您可以將 ring 順時針或逆時針旋轉 一個位置 ,計為1步。旋轉的最終目的是將字符串 ring 的一個字符與 12:00 方向對齊,并且這個字符必須等于字符 key[i]

  2. 如果字符 key[i] 已經對齊到12:00方向,您需要按下中心按鈕進行拼寫,這也將算作 1 步。按完之后,您可以開始拼寫 key 的下一個字符(下一階段), 直至完成所有拼寫。

示例 1:
請添加圖片描述
輸入: ring = “godding”, key = “gd” 輸出: 4 解釋: 對于 key 的第一個字符 ‘g’,已經在正確的位置, 我們只需要1步來拼寫這個字符。 對于 key 的第二個字符 ‘d’,我們需要逆時針旋轉 ring “godding” 2步使它變成 “ddinggo”。 當然, 我們還需要1步進行拼寫。 因此最終的輸出是 4。
示例 2:
輸入: ring = “godding”, key = “godding” 輸出: 13

提示:

  • 1 <= ring.length, key.length <= 100

  • ringkey 只包含小寫英文字母

  • 保證 字符串 key 一定可以由字符串 ring 旋轉拼出

題解
/*** @param {string} ring* @param {string} key* @return {number}*/
var findRotateSteps = function (ring, key) {// 外環編碼相同字母索引放到同一數組const ringMap = {};for (let i = 0; i < ring.length; i++) {const word = ring[i];if (ringMap[word]) {ringMap[word].push(i);} else {ringMap[word] = [i];}}// 重復計算會超時 由于 1 <= ring.length, key.length <= 100 所以可以搞個備忘錄const memo = new Array(ring.length); //  相同編碼索引開始,終點索引相同 直接取對應的最小步長function bfs(ringIndex, keyIndex) {if (keyIndex == key.length) return 0;const stepMemo = memo[ringIndex]?.[keyIndex];if (stepMemo) return stepMemo;// 字母對應外編碼多個位置的數組const arr = ringMap[key[keyIndex]];let minStep = Infinity;// 找到這個字母不同位置、不同方向旋轉最小的步長for (let item of arr) {// 同一個字母 不同方向移動步長const l =ringIndex - item >= 0? ringIndex - item: ringIndex - item + ring.length;const r = ring.length - l;// 不同旋轉方向最小步長const min = Math.min(l, r);minStep = Math.min(minStep, min + bfs(item, keyIndex + 1));}memo[ringIndex] = { ...memo[ringIndex], [keyIndex]: minStep };return minStep;}// 按下按鈕需要一步,key個字母就是key.lengthreturn key.length + bfs(0, 0);
};

647. 回文子串

題目

給你一個字符串 s ,請你統計并返回這個字符串中 回文子串 的數目。
回文字符串 是正著讀和倒過來讀一樣的字符串。
子字符串 是字符串中的由連續字符組成的一個序列。

示例 1:
輸入: s = “abc” 輸出: 3 解釋: 三個回文子串: “a”, “b”, “c”
示例 2:
輸入: s = “aaa” 輸出: 6 解釋: 6個回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”

提示:

  • 1 <= s.length <= 1000

  • s 由小寫英文字母組成

題解
/*** @param {string} s* @return {number}*/
var countSubstrings = function(s) {const n=s.length;let myNumber=0;for(var i=0;i<2*n-1;i++){//2n-1個回文中心let l=i/2;let r=i/2+(i%2);while(l>=0&&r<n&&s.charAt(l)===s.charAt(r)){//charAt(1.5)===charAt(1)l--r++myNumber++}}return myNumber};

709. 轉換成小寫字母

題目

給你一個字符串 s ,將該字符串中的大寫字母轉換成相同的小寫字母,返回新的字符串。

示例 1:
輸入: s = “Hello” 輸出: “hello”
示例 2:
輸入: s = “here” 輸出: “here”
示例 3:
輸入: s = “LOVELY” 輸出: “lovely”

提示:

  • 1 <= s.length <= 100

  • s 由 ASCII 字符集中的可打印字符組成

題解
/*** @param {string} str* @return {string}*/
var toLowerCase = function (str) {let startA = 65;//大寫字母A到Z,對應的 ASCII 碼值范圍是65到90。let endZ = 90;// let starta=97;//小寫字母a到z,對應的 ASCII 碼值范圍是97到122。// let endz=122;let res = "";for (var i = 0; i < str.length; i++) {let charcode = str.charCodeAt(i);if (charcode >= startA && charcode <= endZ) {res += String.fromCharCode(charcode + 32);} else {res += str.charAt(i);}}return res;
};

3305. 元音輔音字符串計數 I

題目

給你一個字符串 word 和一個 非負 整數 k
返回 word 的 子字符串 中,每個元音字母('a''e''i''o''u'至少 出現一次,并且 恰好 包含 k 個輔音字母的子字符串的總數。

示例 1:
輸入: word = “aeioqq”, k = 1
輸出: 0
解釋:
不存在包含所有元音字母的子字符串。
示例 2:
輸入: word = “aeiou”, k = 0
輸出: 1
解釋:
唯一一個包含所有元音字母且不含輔音字母的子字符串是 word[0..4],即 "aeiou"
示例 3:
輸入: word = “ieaouqqieaouqq”, k = 1
輸出: 3
解釋:
包含所有元音字母并且恰好含有一個輔音字母的子字符串有:

  • word[0..5],即 "ieaouq"

  • word[6..11],即 "qieaou"

  • word[7..12],即 "ieaouq"

提示:

  • 5 <= word.length <= 250

  • word 僅由小寫英文字母組成。

  • 0 <= k <= word.length - 5

題解
var countOfSubstrings = function (word, k) {let sum = 0;let start = 0;let end = start + 5 + k;while (start < word.length - 4 - k) {const itemStr = word.substring(start, end);const vowelWordMap = {a: 0,e: 0,i: 0,o: 0,u: 0,};for (let j = 0; j < itemStr.length; j++) {if (!isNaN(vowelWordMap[itemStr[j]])) vowelWordMap[itemStr[j]] += 1;}let vowelWordSum = 0;let isTrueStr = true;for (let key in vowelWordMap) {vowelWordSum += vowelWordMap[key];if (vowelWordMap[key] < 1) {isTrueStr = false;break;}}if (isTrueStr && end - start - vowelWordSum === k) {sum++;}end++;if (end > word.length) {start++;end = start + 5 + k;}}return sum;
};

LCR 018. 驗證回文串

題目

給定一個字符串 s ,驗證 s 是否是 回文串 ,只考慮字母和數字字符,可以忽略字母的大小寫。
本題中,將空字符串定義為有效的 回文串

示例 1:
輸入: s = “A man, a plan, a canal: Panama” 輸出: true 解釋: “amanaplanacanalpanama” 是回文串
示例 2:
輸入: s = “race a car” 輸出: false 解釋: “raceacar” 不是回文串

提示:

  • 1 <= s.length <= 2 * 10(5)

  • 字符串 s 由 ASCII 字符組成

題解
/*** @param {string} s* @return {boolean}*/
var isPalindrome = function (s) {if (!s) {return false;}let startIndex = 0;let endIndex = s.length - 1;while (startIndex < endIndex) {const startItem = s[startIndex].toLocaleLowerCase();const endItem = s[endIndex].toLocaleLowerCase();const isStartMatching = /\d|[a-z]/g.test(startItem);if (!isStartMatching) {startIndex++;continue;}const isEndMatching = /\d|[a-z]/g.test(endItem);if (!isEndMatching) {endIndex--;continue;}if (startItem === endItem) {startIndex++;endIndex--;continue;} else {return false;}}return true;
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80749.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java求職者面試:從Spring Boot到微服務的技術深度探索

場景&#xff1a;互聯網大廠Java求職者面試 角色介紹&#xff1a; 面試官&#xff1a;技術精湛&#xff0c;負責把控面試質量。謝飛機&#xff1a;搞笑的程序員&#xff0c;偶爾能答對問題。 第一輪&#xff1a;基礎知識 面試官&#xff1a;謝飛機&#xff0c;你能簡要介紹…

榕壹云國際版短劇系統:基于Spring Boot+MySQL+UniApp的全球短劇創作平臺

一、項目背景與簡介 在短視頻行業高速發展的今天&#xff0c;短劇內容已成為全球用戶娛樂消費的新寵。為滿足市場對高質量、多樣化短劇的需求&#xff0c;我們基于Spring Boot MySQL UniApp技術棧開發了榕壹云國際版短劇系統&#xff0c;這是一款面向全球市場的短劇創作與分…

資料分享!瑞芯微RK3506(3核ARM+Cortex-A7 + ARM Cortex-M0)工業評估板硬件資料

前 言 本文主要介紹TL3506-EVM評估板硬件接口資源以及設計注意事項等內容。 RK3506J/RK3506B處理器的IO電平標準一般為1.8V、3.3V,上拉電源一般不超過3.3V或1.8V,當外接信號電平與IO電平不匹配時,中間需增加電平轉換芯片或信號隔離芯片。按鍵或接口需考慮ESD設計,ESD器…

C#通過NTP服務器獲取NTP時間

C#通過NTP服務器獲取NTP時間 注意事項&#xff1a; 如果NTP服務器地址是域名&#xff0c;如阿里云的NTP服務器地址。需要DNS解析。NTP使用UDP通訊&#xff0c;默認端口是123NTP經過很多年的發展&#xff0c;有4個版本號&#xff0c;目前常用的3和4。NTP區分客戶端和服務端&am…

使用cmd來創建數據庫和數據庫表-簡潔步驟

創建數據庫和表&#xff1a; 1. 按WinR打開“運行”&#xff0c;輸入cmd&#xff0c;回車 2. 登錄數據庫&#xff1a;mysql -u root -p 然后輸入密碼 3. 創建數據庫create database myblog; myblog為數據庫名(自定義你的數據庫名) &#xff01;注意分號不要漏了&#xff01; …

java工具類

LocalDateTime LocalDateTime可以獲取當前時間&#xff1a; LocalDateTime now LocalDateTime.now(); 同時他也可以獲取指定時間&#xff1a; LocalDateTime dateTime LocalDateTime.of(2023, 5, 15, 10, 30) 若我們時間值超出了我們的實際情況值&#xff0c;我們將會出現…

02_java的運行機制以及JDKJREJVM基本介紹

1、運行機制 2、JDK&JRE&JVM JDK 基本介紹 &#xff08;1&#xff09; JDK 的全稱(Java Development Kit Java開發工具包) JDK JRE java的開發工具 [ java, javac, javadoc, javap等 ] &#xff08;2&#xff09;JDK是提供給Java開發人員使用的&#xff0c;其…

【文心快碼】確實有點東西!

這里寫自定義目錄標題 背景 Electron 開發 Markdown 編輯器全記錄提問1&#xff1a;提問2&#xff1a;提問3&#xff1a;提問4&#xff1a;完整項目結構總結 背景 前兩天百度在2025 百度AI開發者大會"如何駕馭Coding Agent分會場"上發布了文心快碼&#xff0c;注冊試…

AI心理健康服務平臺項目面試實戰

AI心理健康服務平臺項目面試實戰 第一輪提問&#xff1a; 面試官&#xff1a; 請簡要介紹一下AI心理健康服務平臺的核心技術架構。在AI領域&#xff0c;心理健康服務的機遇主要體現在哪些方面&#xff1f;如何利用NLP技術提升用戶與AI的心理健康對話體驗&#xff1f; 馬架構…

Win10安裝 P104-100 驅動

安裝完之后總結一下, 之前做了不少功課, 在網上搜了很多教程, 視頻的文字的, 但是很多已經比較陳舊了. 最后發現的這個 GitHub 項目 NVIDIA-patcher 是最有用的, 因為這是現在這些魔改驅動的來源. NVIDIA-patcher 倉庫地址: https://github.com/dartraiden/NVIDIA-patcher 安…

把一個 PyTorch 的圖像張量轉換成 NumPy 格式,并按照正確的維度順序顯示出來

示例代碼&#xff1a; plt.imshow(np.transpose(tensor_denorm.numpy(), (1, 2, 0)))它的作用是&#xff1a;把一個 PyTorch 的圖像張量轉換成 NumPy 格式&#xff0c;并按照正確的維度順序顯示出來。 &#x1f680; 一步步解釋&#xff1a; ? tensor_denorm 這是一個形狀為…

【速寫】conda安裝(linux)

序言 昨天葉凱浩空降&#xff08;全馬241&#xff09;&#xff0c;降維打擊&#xff0c;10分24秒斷層奪冠。 夏瀟陽10分53秒絕殺小崔10分54秒第2&#xff0c;小崔第3&#xff0c;均配都在3’30"以內&#xff0c;即便我是去年巔峰期也很難跑出這種水平。我就知道他去年大…

算法題(135):唯一的雪花

審題&#xff1a; 本題需要我們對于每一組數據都找出最大的包裹大小 思路&#xff1a; 本題解析題目意思后我們可以把雪花的編號當成數組中元素的值&#xff0c;把包裹看成一個區間。 本質上就是讓我們找出一組數據中&#xff0c;所有子段中最長的子段。 方法一&#xff1a;暴力…

算法習題-力扣446周賽題解

算法可以調度思維&#xff0c;讓程序員的思維發散&#xff0c;找到更好的解決方案。 第一題&#xff1a;執行指令后的得分 題目&#xff1a; 給你兩個數組&#xff1a;instructions 和 values&#xff0c;數組的長度均為 n。你需要根據以下規則模擬一個過程&#xff1a; 從下標…

Ubuntu下MySQL的安裝

Ubuntu下MySQL的安裝 1. 查看當前操作系統版本2. 添加MySQL APT源2.1 訪問下載頁面&#xff0c;并下載發布包2.2 執行安裝指令2.3 安裝MySQL 3. 查看MySQL狀態4. 設置開機自啟動 1. 查看當前操作系統版本 通過命令lsb_release -a查看&#xff1a; 2. 添加MySQL APT源 2.1 訪問下…

航順 芯片 開發記錄 (一) 2025年4月27日19:23:32

芯片型號: HK32F030MF4P6 第一步:創建工程目錄 inc :頭文件目錄 MDK-ARM : 工程根目錄 (新建工程選擇該目錄) src :相關資源存放位置 官方函數庫相關內容 官方函數庫大致結構圖 ├─HK32F030MLib ├─CMSIS │ ├─CM0 │ │ └─Core │ │ arm_common_table…

Python 數據可視化進階:精準插入圖表到指定 Excel 工作表

Python 數據可視化進階&#xff1a;精準插入圖表到指定 Excel 工作表 在處理數據的過程中&#xff0c;我們常常需要將生成的圖表精準地插入到已存在數據的 Excel 文件的指定工作表中。借助 Python 的強大庫組合&#xff0c;這一操作得以高效實現。以下是經過優化和注釋補充的代…

集成方案 | Docusign + 甄零科技,賦能企業海外業務高效增長!

本文將詳細介紹 Docusign 與甄零科技的集成步驟及其效果&#xff0c;并通過實際應用場景來展示 Docusign 的強大集成能力&#xff0c;以證明 Docusign 集成功能的高效性和實用性。 甄零科技是一家專注于數字化合同管理系統的 SaaS 解決方案提供商&#xff0c;致力于為企業打造“…

00-算法打卡-目錄

1 數組 01-算法打卡-數組-二分查找-leetcode(704)-第一天-CSDN博客 02-算法打卡-數組-二分查找-leetcode(35)-第二天-CSDN博客 03-算法打卡-數組-二分查找-leetcode(34)-第三天_leetcode 34-CSDN博客 04-算法打卡-數組-二分查找-leetcode(69)-第四天-CSDN博客 05-算法打卡-數組…

劍指Offer(數據結構與算法面試題精講)C++版——day21

劍指Offer&#xff08;數據結構與算法面試題精講&#xff09;C版——day21 題目一&#xff1a;數據流的第k大數字題目二&#xff1a;出現頻率最高的k個數字題目三&#xff1a;和最小的k個數對附錄&#xff1a;源碼gitee倉庫 題目一&#xff1a;數據流的第k大數字 題目&#xff…