91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

判斷兩個(gè)字符串中的字母是否一致

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

掃碼添加小助手

加入工程師交流群

大家好,我是吳師兄

今天的題目來(lái)源于 LeetCode 第 242 號(hào)問(wèn)題:有效的字母異位詞,難度為「簡(jiǎn)單」。

一、題目描述

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

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

示例 1:

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

示例 2:

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

提示:

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

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

二、題目解析

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

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

沒(méi)錯(cuò),就是哈希表

解法思路很簡(jiǎn)單。

1、首先先判斷兩個(gè)字符串長(zhǎng)度是否相同,不相同直接返回false

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

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

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

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

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

三、參考代碼

1、Java 代碼

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

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

//直接返回false
returnfalse;

}

//讓a-z這26個(gè)字母對(duì)應(yīng)的下標(biāo)變成0-25方便存到數(shù)組中
//比如a對(duì)應(yīng)的索引就是0
//b對(duì)應(yīng)的索引就是1
int[]table=newint[26];

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

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

}

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

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

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

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

}

}

//否則,說(shuō)明是字母異位詞
returntrue;

}
}

2、C++ 代碼

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

//直接返回false
returnfalse;

}

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

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

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

}

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

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

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

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

}

}

//否則,說(shuō)明是字母異位詞
returntrue;
}
};

3、Python 代碼

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

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

#讓a-z這26個(gè)字母對(duì)應(yīng)的下標(biāo)變成0-25方便存到數(shù)組中
#比如a對(duì)應(yīng)的索引就是0
#b對(duì)應(yīng)的索引就是1
table=[0]*26

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

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

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


foriint:

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

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

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

#那就不是字母異位詞
returnFalse


#否則,說(shuō)明是字母異位詞
returnTrue

四、復(fù)雜度分析

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

審核編輯 :李倩


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

    關(guān)注

    32

    文章

    2315

    瀏覽量

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

    關(guān)注

    0

    文章

    2

    瀏覽量

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

    關(guān)注

    1

    文章

    596

    瀏覽量

    23165

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    求助 LabVIEW 字符串比較

    1.輸入一個(gè)字符串,儲(chǔ)存起來(lái)。 2.再次輸入一個(gè)字符串,先和儲(chǔ)存起來(lái)的字符串比較,如果不同則存儲(chǔ)起來(lái),如果相同則不儲(chǔ)存。 3.再次輸入一個(gè)字符串,和所有儲(chǔ)存起來(lái)的
    發(fā)表于 03-02 17:24

    打開(kāi)工程后工程的字體沒(méi)有顯示,如字符串,數(shù)字等控件不能預(yù)覽顯示字體?

    打開(kāi)工程后工程的字體沒(méi)有顯示,如字符串,數(shù)字等控件不能預(yù)覽顯示字體?
    發(fā)表于 02-25 17:39

    字符串控件與靜態(tài)字符串控件預(yù)覽字符顯示亂碼,如何修改顯示正常?

    字符串控件與靜態(tài)字符串控件預(yù)覽字符顯示亂碼,如何修改顯示正常?
    發(fā)表于 01-20 17:17

    字符串,數(shù)字控件如何控制背景顏色和前景字體顏色?

    字符串,數(shù)字控件如何控制背景顏色和前景字體顏色?
    發(fā)表于 01-20 15:12

    單片機(jī)的串口通訊串行同步通信與串行異步通信

    就保證了起始位開(kāi)始處定會(huì)有個(gè)下跳沿,由此就可以標(biāo)志一個(gè)字符傳輸?shù)钠鹗?。而根?jù)起始位和停止位也就很容易的實(shí)現(xiàn)了字符的界定和同步。 顯然,采用異步通信時(shí),發(fā)送端和接收端可以由各自的
    發(fā)表于 01-15 08:06

    Linux下怎么讓中文字符串按照拼音排序?

    求教 Linux 下怎么讓中文字符串按照拼音排序?
    發(fā)表于 01-06 07:40

    字符串關(guān)聯(lián)數(shù)字變量如何使用?我們的地址都是16位數(shù)據(jù),可以使用16位數(shù)字變量顯示字符串嗎?

    字符串關(guān)聯(lián)數(shù)字變量如何使用?我們的地址都是16位數(shù)據(jù),可以使用16位數(shù)字變量顯示字符串嗎?
    發(fā)表于 12-15 08:24

    飛凌嵌入式ElfBoard-標(biāo)準(zhǔn)IO接口之格式化輸入

    字符,格式說(shuō)明符除外(%):任何不是空格字符(空白、換行符或制表符)或格式說(shuō)明符(以%字符開(kāi)頭)的字符都會(huì)導(dǎo)致函數(shù)從流讀取下
    發(fā)表于 11-12 08:35

    RISC-V的工具鏈GCC內(nèi)聯(lián)匯編

    ;;\"作為分隔符,沒(méi)有添加分隔符的兩個(gè)字符串會(huì)被合并成為一個(gè)字符串。“匯編指令列表”的編寫(xiě)語(yǔ)法和普通的匯編程編寫(xiě)是樣的。 4.\"輸入操作數(shù)\",用來(lái)指定當(dāng)前內(nèi)聯(lián)匯編程序的輸入
    發(fā)表于 10-30 06:59

    labview如何生成個(gè)帶字符串返回的dll

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

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

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

    harmony-utils之StrUtil,字符串工具類(lèi)

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

    英語(yǔ)單詞學(xué)習(xí)頁(yè)面+單詞朗讀實(shí)現(xiàn) -- 【1】頁(yè)面實(shí)現(xiàn) ##HarmonyOS SDK AI##

    Speech Kit(基礎(chǔ)語(yǔ)音服務(wù)),即端側(cè)AI 我們分篇文章來(lái)講解 對(duì)于例句單詞效果突出顯示,開(kāi)始我想到的是“屬性字符串StyledString/MutableStyledString”。 通過(guò)閱讀相關(guān)
    發(fā)表于 06-29 23:24

    請(qǐng)問(wèn)STM32MP135 I2C MemAddress最多兩個(gè)字節(jié)嗎?

    MP135的I2C底層讀寫(xiě)函數(shù)里面對(duì)于MemAddress做了限制, 最多兩個(gè)字節(jié)的MemAddress, 這是MP135的硬件限制 還是 單純的在功能的實(shí)現(xiàn)上做了限制? 我現(xiàn)在對(duì)接的設(shè)備 他必須要三字節(jié)的MemAddress,怎么辦呢
    發(fā)表于 03-14 08:23

    求助,關(guān)于STM32口Bootloader的兩個(gè)問(wèn)題求解

    串口Bootloader兩個(gè)問(wèn)題: 1.APP和Bootloader對(duì)于串口的初始化以及中斷處理函數(shù)的定義是否需要保持一致,特別是有關(guān)接收和發(fā)送的緩沖區(qū)? 2.Bootloader
    發(fā)表于 03-12 07:17