01.01、判定字符是否唯一

01.01、[簡單] 判定字符是否唯一

1、題目描述

實現一個算法,確定一個字符串 s 的所有字符是否全都不同。

在這一題中,我們的任務是判斷一個字符串 s 中的所有字符是否全都不同。我們將討論兩種不同的方法來解決這個問題,并詳細解釋每種方法的實現過程。

2、方法一:使用哈希表計數

2.1、思路解析

我們可以利用一個哈希表(數組)來記錄字符串中每個字符的出現次數。具體步驟如下:

  1. 字符數判斷:如果字符串的長度超過 26,那么肯定有重復字符,因為只有 26 個小寫字母。
  2. 哈希表初始化:創建一個長度為 26 的數組 hash,用于記錄每個字符的出現次數。
  3. 遍歷字符串:對于字符串中的每個字符,將對應的哈希表位置加 1。
  4. 重復字符檢測:在遍歷過程中,如果某個字符的出現次數大于 1,直接返回 false
  5. 返回結果:遍歷結束后,如果沒有發現重復字符,返回 true
2.2、代碼實現
class Solution {
public:bool isUnique(string astr) {// 如果字符串長度超過 26,必然有重復字符if (astr.size() > 26) {return false;}// 初始化一個哈希表,長度為 26,對應 26 個字母int hash[26] = {0};// 遍歷字符串中的每個字符for (const auto& ch : astr) {// 將字符轉換為相應的索引位置hash[ch - 'a']++;// 如果某個字符的計數大于 1,則返回 falseif (hash[ch - 'a'] > 1) {return false;}}// 如果沒有發現重復字符,返回 truereturn true;}
};
2.3、代碼詳解
  • 首先檢查字符串長度。如果長度超過 26,立即返回 false,因為小寫字母只有 26 個,無法保證全部字符唯一。
  • 初始化一個長度為 26 的整型數組 hash,用于記錄每個字母的出現次數。
  • 使用范圍循環遍歷字符串中的每個字符。
  • 計算當前字符在 hash 數組中的索引,并將其對應的值加 1。如果某個字符的計數大于 1,表示該字符重復,立即返回 false
  • 遍歷結束后,如果沒有重復字符,則返回 true

3、方法二:使用位圖優化

3.1、思路解析

第二種方法使用了位圖(bit vector)來優化空間復雜度。這種方法的核心思想是使用一個整數的位來表示字符是否出現過。具體步驟如下:

  1. 字符數判斷:與方法一相同,首先判斷字符串長度是否超過 26。
  2. 位圖初始化:使用一個整數 bitMap 來表示字符出現情況,初始值為 0。
  3. 遍歷字符串:對于字符串中的每個字符,檢查 bitMap 中相應的位置是否已經設置。
  4. 重復字符檢測:如果 bitMap 中相應的位置已經設置過,返回 false。否則,將該位置設置為 1。
  5. 返回結果:遍歷結束后,如果沒有發現重復字符,返回 true
3.2、代碼實現
class Solution {
public:bool isUnique(string astr) {// 利用鴿巢原理來做的優化,如果字符串長度超過 26,必然有重復字符if (astr.size() > 26)return false;// 使用位圖(bit vector)來記錄字符出現情況int bitMap = 0;// 遍歷字符串中的每個字符for (const auto& ch : astr) {int i = ch - 'a'; // 將字符轉換為相應的位位置// 判斷當前字符是否已經在 bitMap 中出現過if (((bitMap >> i) & 1) == 1)return false; // 如果已出現,返回 false// 將當前字符加入到 bitMap 中bitMap |= 1 << i;}// 如果沒有發現重復字符,返回 truereturn true;}
};
3.3、代碼詳解
  • 同樣首先檢查字符串長度。如果長度超過 26,直接返回 false
  • 初始化一個整型變量 bitMap,初始值為 0,用于記錄字符的出現情況。
  • 遍歷字符串中的每個字符。計算當前字符在 bitMap 中對應的位位置。
  • 檢查 bitMap 中相應的位是否已經為 1。如果為 1,表示該字符已出現過,返回 false。如果當前字符沒有出現過,將對應的位設置為 1。
  • 遍歷結束后,如果沒有重復字符,返回 true

4、總結

這兩種方法都可以有效地判斷一個字符串中的字符是否全都不同。方法一使用了哈希表,代碼直觀易懂,而方法二使用了位圖優化,節省了空間。如果字符串長度超過 26,直接返回 false,因為小寫字母只有 26 個,因此這是一種基于鴿巢原理的優化。選擇哪種方法取決于具體的需求和優化目標。

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

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

相關文章

w208基于spring boot物流管理系統設計與實現

&#x1f64a;作者簡介&#xff1a;多年一線開發工作經驗&#xff0c;原創團隊&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的網站項目。 代碼可以查看文章末尾??聯系方式獲取&#xff0c;記得注明來意哦~&#x1f339;贈送計算機畢業設計600個選題excel文…

《剛剛問世》系列初窺篇-Java+Playwright自動化測試-22- 操作鼠標拖拽 - 下篇(詳細教程)

1.簡介 上一篇中&#xff0c;宏哥說的宏哥在最后提到網站的反爬蟲機制&#xff0c;那么宏哥在自己本地做一個網頁&#xff0c;沒有那個反爬蟲的機制&#xff0c;谷歌瀏覽器是不是就可以驗證成功了&#xff0c;宏哥就想驗證一下自己想法&#xff0c;其次有人私信宏哥說是有那種…

神經網絡常見激活函數 8-SELU函數

SELU 縮放指數線性單元&#xff1a;SELU&#xff08;Scaled Exponential Linear Unit&#xff09; 函數導函數 SELU函數 S E L U ( x ) { λ x x > 0 λ α ( e x ? 1 ) x ≤ 0 \rm SELU(x) \left\{ \begin{array}{} \lambda x \quad & x > 0 \\ \lambda \alph…

【Elasticsearch】多字段查詢方式匯總

在 Elasticsearch 中&#xff0c;實現多字段查詢的常見方式有以下幾種&#xff0c;每種方式適用于不同的場景&#xff1a; --- ### 1. **multi_match 查詢** - **用途**&#xff1a;在多個字段中執行同一查詢&#xff0c;支持多種匹配策略。 - **關鍵參數**&#xff1a…

多線之旅:wait 與 notify

今天小編繼續來分享下多線程中的一些內容。 在多線程環境下&#xff0c;由于線程調度的不確定性&#xff0c;所以我們有時候無法很好的去保證其線程的執行順序。 但是呢&#xff0c;我們又要實現這個順序執行&#xff0c;所以我們可以使用到這兩個方法&#xff0c;wait 和 no…

批量修改mysql字符串字段子字符串

替換子字符串 使用 REPLACE 函數替換字段中的特定子字符串。 示例&#xff1a; 將 table_name 表中 column_name 字段的所有 old_value 替換為 new_value。 UPDATE table_name SET column_name REPLACE(column_name, old_value, new_value) WHERE column_name LIKE %old_val…

達夢:AWR 生成

目錄標題 AWR 性能診斷與報告生成1. 檢查 AWR 系統狀態2. 查看數據庫中的所有表空間3. 查看現有的 AWR 快照4. 設置 AWR 快照的時間間隔5. 創建 AWR 快照6. 查看最新的 AWR 快照7. 生成 AWR HTML 報告8. 將 AWR 報告保存到指定文件鏈接總結 自動工作集負載信息庫 AWR 報告解析指…

股票數據接口API實例代碼python、JAVA等多種語言演示免費獲取實時數據、歷史數據、CDMA、KDJ等指標數據配有API說明文檔

? 本文中所有接口均可直接在瀏覽器打開獲取數據&#xff0c;為了便于大家驗證有效性&#xff0c;已經做好了超鏈接&#xff0c;直接點擊即可&#xff01; 滬深兩市股票列表 API接口鏈接&#xff08;可點擊驗證&#xff09;&#xff1a;https://api.mairui.club/hslt/list/b…

深入理解DOM:22個核心知識點與代碼示例

本文系統介紹DOM相關的22個核心概念&#xff0c;每個知識點均提供代碼示例及簡要說明&#xff0c;幫助開發者全面掌握DOM操作技巧。 一、DOM基礎概念 1. DOM概念 DOM&#xff08;Document Object Model&#xff09;是HTML/XML的編程接口&#xff0c;通過JavaScript可動態修改…

【Map vs Set】:Java數據存儲的“雙子星”對決

個人主頁&#xff1a;?喜歡做夢 歡迎 &#x1f44d;點贊 ?關注 ??收藏 &#x1f4ac;評論 目錄 &#x1f370;一、搜索 &#x1f36e;1.概念 &#x1f36e;2.模型 &#x1f370;二、Map &#x1f368;1.什么是Map&#xff1f; &#x1f368;2.Map的實例化 &…

【C語言 】C語言 桌游開發數字競拍(源碼)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【C語言 】C語言 桌游開發數字競拍&#xff08;源碼…

Reinforcement Learning Heats Up 強化學習持續升溫

Reinforcement Learning Heats Up 強化學習持續升溫 核心觀點&#xff1a;強化學習正成為構建具有高級推理能力大語言模型&#xff08;LLMs&#xff09;的重要途徑。 最新進展 模型示例&#xff1a;近期出現了如DeepSeek - R1及其變體&#xff08;DeepSeek - R1 - Zero&#xf…

Whisper+T5-translate實現python實時語音翻譯

1.首先下載模型&#xff0c;加載模型 import torch import numpy as np import webrtcvad import pyaudio import queue import threading from datetime import datetime from faster_whisper import WhisperModel from transformers import AutoTokenizer, AutoModelForSeq2…

湖倉分析|浙江霖梓基于 Doris + Paimon 打造實時/離線一體化湖倉架構

導讀&#xff1a;浙江霖梓早期使用 CDH 產品套件搭建了大數據系統&#xff0c;面臨業務邏輯冗余、查詢效率低下等問題&#xff0c;基于 Apache Doris 進行整體架構與表結構的重構&#xff0c;并基于湖倉一體和查詢加速展開深度探索與實踐&#xff0c;打造了 Doris Paimon 的實…

git bash在github的庫中上傳或更新本地文件

一、將本地文件上傳到 GitHub 倉庫 1. 創建 GitHub 倉庫 如果你還沒有在 GitHub 上創建倉庫&#xff0c;首先需要創建一個新的倉庫&#xff1a; 登錄到 GitHub。點擊右上角的 按鈕&#xff0c;選擇 New repository。給你的倉庫起個名字&#xff0c;并選擇 Public 或 Privat…

Jmeter壓測怎么控制TPS

壓測固定TPS的接口 有些任務需要我們控制接口的TPS&#xff0c;例如每秒請求一次。 TPS定時器 然后1個并發持續運行 壓測結果 需要注意TPS在1.0/s左右&#xff0c;有時可能是1.2、1.3&#xff0c;定時器會自動調整壓力&#xff0c;讓TPS保持在1.0左右。

ArcGISPro 新建shp+數據結構

import arcpy# 設置工作空間和 Shapefile 存放路徑 shp_path r"C:\path\to\your\folder\PolygonZY.shp" # Shapefile 存放路徑 fields [("CHBH", "TEXT", 20),("ZCMC", "TEXT", 100),("ZCLX", "TEXT"…

理解WebGPU 中的 GPUAdapter :連接瀏覽器與 GPU 的橋梁

在 WebGPU 開發中&#xff0c; GPUAdapter 是一個至關重要的對象&#xff0c;它作為瀏覽器與 GPU 之間的橋梁&#xff0c;為開發者提供了請求 GPU 設備、查詢 GPU 特性以及獲取適配器信息的能力。本文將詳細介紹 GPUAdapter 的核心屬性和方法&#xff0c;并通過實際代碼…

信呼OA辦公系統sql注入漏洞分析

漏洞描述 信呼OA辦公系統uploadAction存在SQL注入漏洞&#xff0c;攻擊者可利用該漏洞獲取數據庫敏感信息。 環境搭建 源碼下載地址&#xff1a;https://github.com/rainrocka/xinhu 下載后解壓到本地網站根目錄下&#xff0c;配置好數據庫&#xff0c;然后安裝即可 默認密…

vue框架生命周期詳細解析

Vue.js 的生命周期鉤子函數是理解 Vue 組件行為的關鍵。每個 Vue 實例在創建、更新和銷毀過程中都會經歷一系列的生命周期階段&#xff0c;每個階段都有對應的鉤子函數&#xff0c;開發者可以在這些鉤子函數中執行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分為以下幾…