chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:吳師兄學(xué)算法 ? 作者:吳師兄學(xué)算法 ? 2022-08-05 11:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是吳師兄

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

一、題目描述

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

注意:st中每個字符出現(xiàn)的次數(shù)都相同,則稱st互為字母異位詞。

示例 1:

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

示例 2:

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

提示:

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

進(jìn)階:如果輸入字符串包含 unicode 字符怎么辦?你能否調(diào)整你的解法來應(yīng)對這種情況?

二、題目解析

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

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

沒錯,就是哈希表!

解法思路很簡單。

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

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

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

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

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

4、最后檢查計數(shù)器是否歸零。

三、參考代碼

1、Java 代碼

//登錄AlgoMooc官網(wǎng)獲取更多算法圖解
//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個字母對應(yīng)的下標(biāo)變成0-25方便存到數(shù)組中
//比如a對應(yīng)的索引就是0
//b對應(yīng)的索引就是1
int[]table=newint[26];

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

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

}

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

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

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

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

}

}

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

}
}

2、C++ 代碼

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

//直接返回false
returnfalse;

}

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

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

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

}

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

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

//如果說發(fā)現(xiàn)這個字母出現(xiàn)的頻次小于了0
//說明t中出現(xiàn)了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個字母對應(yīng)的下標(biāo)變成0-25方便存到數(shù)組中
#比如a對應(yīng)的索引就是0
#b對應(yīng)的索引就是1
table=[0]*26

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

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

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


foriint:

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

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

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

#那就不是字母異位詞
returnFalse


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

四、復(fù)雜度分析

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

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2302

    瀏覽量

    97193
  • 字母
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    7203
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    594

    瀏覽量

    22898

原文標(biāo)題:LeetCode 242:有效的字母異位詞

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    labview如何生成個帶字符串返回的dll

    labview如何生成個dll,如下圖,要求個輸入,類型是字符串,返回類型也是字符串
    發(fā)表于 08-28 23:20

    在Python字符串逆序有幾種方式,代碼是什么

    對于個給定的字符串,逆序輸出,這個任務(wù)對于python來說是種很簡單的操作,畢竟強(qiáng)大的列表和字符串處理的些列函數(shù)足以應(yīng)付這些問題 了,
    的頭像 發(fā)表于 08-28 14:44 ?410次閱讀

    harmony-utils之StrUtil,字符串工具類

    harmony-utils之StrUtil,字符串工具類 harmony-utils 簡介與說明 [harmony-utils] 款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用工具類
    的頭像 發(fā)表于 07-03 11:32 ?262次閱讀

    字符串在數(shù)據(jù)庫的存儲方式

    數(shù)據(jù)庫是現(xiàn)代信息技術(shù)存儲和管理數(shù)據(jù)的核心組件。字符串作為最常見的數(shù)據(jù)類型之,在數(shù)據(jù)庫的存儲方式對其性能和可擴(kuò)展性有著重要影響。 數(shù)據(jù)類型 固定長度
    的頭像 發(fā)表于 01-07 15:41 ?1140次閱讀

    字符串在編程的應(yīng)用實例

    字符串在編程中有著廣泛的應(yīng)用,它們被用于表示文本數(shù)據(jù)、處理用戶輸入、構(gòu)建動態(tài)內(nèi)容等。以下是字符串在編程的應(yīng)用實例: 1. 用戶輸入與輸出 用戶輸入 :程序通常需要從用戶那里獲取輸
    的頭像 發(fā)表于 01-07 15:33 ?941次閱讀

    字符串字符數(shù)組的區(qū)別

    在編程語言中,字符串字符數(shù)組是種基本的數(shù)據(jù)結(jié)構(gòu),它們都用于存儲和處理文本數(shù)據(jù)。盡管它們在功能上有定的重疊,但在內(nèi)部表示、操作方式和使用場景上存在顯著差異。 1. 內(nèi)部表示
    的頭像 發(fā)表于 01-07 15:29 ?1510次閱讀

    字符串反轉(zhuǎn)的實現(xiàn)方式

    在編程字符串反轉(zhuǎn)是個基礎(chǔ)而重要的操作,它涉及到將一個字符串字符順序顛倒過來。這個操作在
    的頭像 發(fā)表于 01-07 15:27 ?1082次閱讀

    字符串處理方法 字符串轉(zhuǎn)數(shù)字的實現(xiàn)

    在編程,將字符串轉(zhuǎn)換為數(shù)字是個常見的需求。不同的編程語言有不同的方法來實現(xiàn)這功能。以下是些常見編程語言中的
    的頭像 發(fā)表于 01-07 15:26 ?1228次閱讀

    C語言筆試題

    。 函數(shù) g 輸出一個字符串,返回整數(shù) 2。 主函數(shù)中用 printf 輸出兩個函數(shù)的函數(shù)值,后面的參數(shù)個是函數(shù) f,個是函數(shù) g。 運行程序應(yīng)該會有三行輸出,
    的頭像 發(fā)表于 12-30 09:48 ?585次閱讀

    HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-應(yīng)用接續(xù)動態(tài)配置跨段遷移

    取值必須保持一致,示例如下: 說明,continueType在本應(yīng)用要保證唯,字符串字母、數(shù)字和下劃線組成,最大長度127
    發(fā)表于 12-25 10:10

    用ads1158在讀取數(shù)據(jù)的時候,后面兩個字節(jié)的數(shù)據(jù)讀不到,為什么?

    我現(xiàn)在用的ads1158在讀取數(shù)據(jù)的時候,通道號是可以正常讀取的,但是后面兩個字節(jié)的數(shù)據(jù)讀不到,不管輸入信號怎么變化,讀到的兩個字節(jié)數(shù)據(jù)始終是個固定值不變。這是為什么??
    發(fā)表于 12-24 06:16

    字符串處理:4G模組軟件指南精要!

    最近直有朋友咨詢我關(guān)于4G模組的字符串處理,今天我便把相關(guān)指南展示給大家。
    的頭像 發(fā)表于 11-17 09:57 ?738次閱讀
    <b class='flag-5'>字符串</b>處理:4G模組軟件指南精要!

    base64在前端開發(fā)的應(yīng)用

    種基于64個可打印字符來表示二進(jìn)制數(shù)據(jù)的方法。它將每3個字節(jié)(24位)的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為4個字符的ASCII字符串。如果原始數(shù)據(jù)不是3的倍數(shù),Base64編碼會在最后添加
    的頭像 發(fā)表于 11-10 14:24 ?1519次閱讀

    base64字符串轉(zhuǎn)換為二進(jìn)制文件

    Base64是種編碼方法,用于將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII字符串。這種編碼通常用于在不支持二進(jìn)制數(shù)據(jù)的系統(tǒng)傳輸數(shù)據(jù),例如電子郵件或網(wǎng)頁。將Base64字符串轉(zhuǎn)換為二進(jìn)制文件的過程相
    的頭像 發(fā)表于 11-10 10:55 ?3388次閱讀

    ASCII碼在編程的應(yīng)用實例

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