在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

判斷兩個字符串中的字母是否一致

算法與數據結構 ? 來源:吳師兄學算法 ? 作者:吳師兄學算法 ? 2022-08-05 11:49 ? 次閱讀

大家好,我是吳師兄

今天的題目來源于 LeetCode 第 242 號問題:有效的字母異位詞,難度為「簡單」。

一、題目描述

給定兩個字符串st,編寫一個函數來判斷t是否是s的字母異位詞。

注意:st中每個字符出現的次數都相同,則稱st互為字母異位詞。

示例 1:

輸入:s="anagram",t="nagaram"
輸出:true

示例 2:

輸入:s="rat",t="car"
輸出:false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st僅包含小寫字母

進階:如果輸入字符串包含 unicode 字符怎么辦?你能否調整你的解法來應對這種情況?

二、題目解析

題目講的是讓你判斷兩個字符串中的字母是否一致,比如示例1中,s包含字母a、n、g、r、m,而t中也包含a、n、g、r、m,都是只有這五個字母,并且頻次相同,只是順序不同。

看到頻次這個詞,你腦海中第一想法是什么?

沒錯,就是哈希表

解法思路很簡單。

1、首先先判斷兩個字符串長度是否相同,不相同直接返回false

2、然后把s中所有的字符出現個數使用計數器統計起來,存入一個大小為 26 的數組中(注意題目的說明)

2bfac0ea-1471-11ed-ba43-dac502259ad0.png

3、最后再來統計t字符串,即遍歷t時將對應的字母頻次進行減少,如果期間 計數器出現小于零的情況,則說明t中包含一個不存在于s中的字母,直接返回false

2c1f3bbe-1471-11ed-ba43-dac502259ad0.png

4、最后檢查計數器是否歸零。

三、參考代碼

1、Java 代碼

//登錄AlgoMooc官網獲取更多算法圖解
//https://www.algomooc.com
//作者:程序員吳師兄
//代碼有看不懂的地方一定要私聊咨詢吳師兄呀
//有效的字母異位詞(LeetCode 242):https://leetcode.cn/problems/valid-anagram/
classSolution{
publicbooleanisAnagram(Strings,Stringt){

//如果兩個字符串的長度都不一致,那么肯定是無法成為字母異位詞的
if(s.length()!=t.length()){

//直接返回false
returnfalse;

}

//讓a-z這26個字母對應的下標變成0-25方便存到數組中
//比如a對應的索引就是0
//b對應的索引就是1
int[]table=newint[26];

//從頭到尾遍歷字符串s
for(inti=0;i//把訪問的字符轉換為整數的形式
//比如訪問字母a,那么-'a'之后就是0,就是a對應的索引為0
intindex=s.charAt(i)-'a';

//那么意味著這個字母出現的頻次需要加1
table[index]++;

}

for(inti=0;i//把訪問的字符轉換為整數的形式
//比如訪問字母a,那么-'a'之后就是0,就是a對應的索引為0
intindex=t.charAt(i)-'a';

//那么意味著這個字母出現的頻次需要減1
table[index]--;

//如果說發現這個字母出現的頻次小于了0
//說明t中出現了s中不曾用的字母
if(table[index]0){

//那就不是字母異位詞
returnfalse;

}

}

//否則,說明是字母異位詞
returntrue;

}
}

2、C++ 代碼

classSolution{
public:
boolisAnagram(strings,stringt){
//如果兩個字符串的長度都不一致,那么肯定是無法成為字母異位詞的
if(s.length()!=t.length()){

//直接返回false
returnfalse;

}

//讓a-z這26個字母對應的下標變成0-25方便存到數組中
//比如a對應的索引就是0
//b對應的索引就是1
vector<int>table(26,0);

//從頭到尾遍歷字符串s
for(inti=0;i//把訪問的字符轉換為整數的形式
//比如訪問字母a,那么-'a'之后就是0,就是a對應的索引為0
intindex=s[i]-'a';

//那么意味著這個字母出現的頻次需要加1
table[index]++;

}

for(inti=0;i//把訪問的字符轉換為整數的形式
//比如訪問字母a,那么-'a'之后就是0,就是a對應的索引為0
intindex=t[i]-'a';

//那么意味著這個字母出現的頻次需要減1
table[index]--;

//如果說發現這個字母出現的頻次小于了0
//說明t中出現了s中不曾用的字母
if(table[index]0){

//那就不是字母異位詞
returnfalse;

}

}

//否則,說明是字母異位詞
returntrue;
}
};

3、Python 代碼

classSolution:
defisAnagram(self,s:str,t:str)->bool:

#如果兩個字符串的長度都不一致,那么肯定是無法成為字母異位詞的
iflen(s)!=len(t):
#直接返回False
returnFalse

#讓a-z這26個字母對應的下標變成0-25方便存到數組中
#比如a對應的索引就是0
#b對應的索引就是1
table=[0]*26

#從頭到尾遍歷字符串s
foriins:

#把訪問的字符轉換為整數的形式
#比如訪問字母a,那么-'a'之后就是0,就是a對應的索引為0
index=ord(i)-ord('a')

#那么意味著這個字母出現的頻次需要加1
table[index]+=1


foriint:

#把訪問的字符轉換為整數的形式
#比如訪問字母a,那么-'a'之后就是0,就是a對應的索引為0
index=ord(i)-ord('a')

#那么意味著這個字母出現的頻次需要減1
table[index]-=1

#如果說發現這個字母出現的頻次小于了0
#說明t中出現了s中不曾用的字母
iftable[index]0:

#那就不是字母異位詞
returnFalse


#否則,說明是字母異位詞
returnTrue

四、復雜度分析

  • 時間復雜度:O(n),其中 n 為 s 的長度。
  • 空間復雜度:O(S)),其中 S 為字符集大小,此處 S = 26 。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計數器
    +關注

    關注

    32

    文章

    2256

    瀏覽量

    94684
  • 字母
    +關注

    關注

    0

    文章

    2

    瀏覽量

    7159
  • 字符串
    +關注

    關注

    1

    文章

    579

    瀏覽量

    20550

原文標題:LeetCode 242:有效的字母異位詞

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    base64字符串轉換為二進制文件

    Base64是種編碼方法,用于將二進制數據轉換為ASCII字符串。這種編碼通常用于在不支持二進制數據的系統傳輸數據,例如電子郵件或網頁。將Base64字符串轉換為二進制文件的過程相
    的頭像 發表于 11-10 10:55 ?1281次閱讀

    ASCII碼在編程的應用實例

    的應用實例: 1. 字符串處理 在編程,ASCII碼常用于字符串的處理。例如,可以使用ASCII碼來比較兩個字符的大小關系,或者通過將字符
    的頭像 發表于 11-10 09:43 ?474次閱讀

    MATLAB(5)--字符串處理

    兩個字符串里的每個字符依次按ASCII值大小逐個進行比較,比較的結果是個數值向量,向量的元素為1或者0。 字符串比較函數用于
    發表于 09-06 10:22

    labview字符串數組轉化為數值數組

    常重要的。LabVIEW支持多種數據類型,包括數值、字符串、數組、簇等。在本例,我們將關注字符串數組和數值數組。 字符串數組 :由系列
    的頭像 發表于 09-04 17:47 ?2501次閱讀

    labview字符串如何轉換為16進制字符串

    在LabVIEW,將字符串轉換為16進制字符串個常見的需求,尤其是在處理數據通信和硬件接口時。LabVIEW提供了多種方法來實現這
    的頭像 發表于 09-04 15:54 ?2632次閱讀

    labview如何實現字符串換行

    1. 字符串換行的基本概念 在LabVIEW字符串換行通常指的是在字符串插入換行符,使得字符串
    的頭像 發表于 09-04 15:47 ?1788次閱讀

    labview如何實現字符串選擇輸出

    在LabVIEW實現字符串選擇輸出是項常見的任務,它涉及到字符串處理、條件判斷和用戶界面設計等多個方面。由于LabVIEW是
    的頭像 發表于 09-04 15:44 ?978次閱讀

    labview中常用的字符串函數有哪些?

    ) : 功能:該函數用于返回字符串所包含的字符個數。 應用場景:常用于需要計算字符串長度的場景,如文件命名、數據處理等。 連接字符串(String Concatenate) : 功能:
    的頭像 發表于 09-04 15:43 ?817次閱讀

    labview字符串的四種表示各有什么特點

    。在LabVIEW字符串種基本的數據類型,用于表示文本信息。字符串在LabVIEW中有多種表示方式,每種方式都有其特定的應用場景和特點。以下是對LabVIEW
    的頭像 發表于 09-04 15:40 ?609次閱讀

    使用CIPDOMAIN命令時,解析長度為64個字符或更大的DNS名稱失敗了,為什么?

    s3.dualstack.us-east-1.amazonaws.com 將字符串減少到 63 個字符有效(-ca57 已替換為 -ca1) AT+CIPDOMAIN=\"
    發表于 07-11 07:59

    FX3在安卓系統上顯示為\"DDC\",有什么辦法可以定義這個字符串嗎?

    正如標題所說,當我將 FX3 插入安卓設備時,安卓會詢問應用程序是否可以訪問\"DDC\" 。 有什么辦法可以定義這個字符串嗎? 謝謝!
    發表于 07-03 08:15

    如何提取串口接收字符串數組里的某個字符串

    條(有時候二十多條不定)響應字符串指令,我是用一個字符串數組來接收這些返回來的指令的。我現在只需要讀取數組里的某條指令,應該怎么把它提取出來啊??有哪位前輩懂的,希望能提供點幫助。我找了好久找到
    發表于 04-22 06:05

    深入解析西門子博途文本塊接口的結構與功能

    STRING 和 WSTRING 數據類型存儲一個字符串的多個字符。允許在字符串中使用任何 ASCII碼類型的字符。這些
    發表于 04-11 11:23 ?1278次閱讀
    深入解析西門子博途文本塊接口的結構與功能

    C語言字符串編譯函數介紹

    在C語言中,字符串實際上是使用null字符O'終止的字符數組。因此,個以null結尾的
    的頭像 發表于 03-07 16:18 ?520次閱讀
    C語言<b class='flag-5'>字符串</b>編譯函數介紹

    PSOC Creator 4.4是否些設置可以阻止strtok操作?

    (“空字符串!”); [i]返回 1; [i]} [i]而(代幣){ [i]//打印代幣 [i]看跌期權(代幣); [i]//再次解析同一個字符串 [i]代幣 = strtok(空
    發表于 01-24 08:31
    主站蜘蛛池模板: 毛片大全免费| 天天草b| 27pao强力打造高清免费高| 香蕉爱爱网| 午夜影院网站| 久久久久性| 夜色伊人| xxxx日本69护士| 国产色啪午夜免费视频| 老师受不了了好硬好大| 自拍偷拍欧美| 欧美色交| 91夫妻视频| 3344在线观看永久免费| 九色视频在线看| 午夜大片在线观看| 国产日韩欧美一区二区| 一色屋成人免费精品网站| 天天操天天干天天射| 国产高清不卡一区二区| 亚洲国产精品久久久久婷婷软件| 欧美午夜视频一区二区三区| 欧美三级视频网站| 免费人成动漫在线播放r18| 男男宿舍高h炒肉bl| 日韩爱爱| 午夜免费视频观看在线播放| 国产日韩三级| 天天干天天干天天色| www亚洲一区| 第四色激情| 国产小视频你懂的| 韩国在线免费视频| 黄色激情小说视频| 美女黄页黄频| 成人免费视频一区二区三区| 国产乱人视频免费播放| 久久综合综合久久| 九九九色| 久久综合五月婷婷| 97在线人人|