色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    2261

    瀏覽量

    94877
  • 字母
    +關注

    關注

    0

    文章

    2

    瀏覽量

    7160
  • 字符串
    +關注

    關注

    1

    文章

    585

    瀏覽量

    20578

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

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

收藏 人收藏

    評論

    相關推薦

    字符串在數據庫的存儲方式

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

    字符串在編程的應用實例

    字符串在編程中有著廣泛的應用,它們被用于表示文本數據、處理用戶輸入、構建動態內容等。以下是字符串在編程的應用實例: 1. 用戶輸入與輸出 用戶輸入 :程序通常需要從用戶那里獲取輸
    的頭像 發表于 01-07 15:33 ?135次閱讀

    字符串字符數組的區別

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

    字符串反轉的實現方式

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

    字符串處理方法 字符串轉數字的實現

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

    ASCII碼在編程的應用實例

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

    MATLAB(5)--字符串處理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    在C語言中,字符串實際上是使用null字符O'終止的字符數組。因此,個以null結尾的
    的頭像 發表于 03-07 16:18 ?537次閱讀
    C語言<b class='flag-5'>字符串</b>編譯函數介紹
    主站蜘蛛池模板: 99re6久久在热线视频 | YELLOW免费观看完整视频 | 亚洲1区2区3区精华液 | 午夜一区二区三区 | 国产精品俺来也在线观看 | 麻豆精品国产剧情观看 | 一品道门免费视频韩国 | 无码AV毛片色欲欧洲美洲 | 国产精品久久人妻无码蜜 | 国产成人a视频在线观看 | 粗好大用力好深快点漫画 | 中文字幕亚洲第一 | 久久青草影院 | 18禁黄无遮挡禁游戏在线下载 | 99久久中文字幕伊人情人 | 毛片在线网址 | 天天啪免费视频在线看 | 日本三级床震 | 美丽的姑娘BD在线观看 | 手机看片国产免费 | 公和我做好爽添厨房中文字幕 | 老湿司午夜爽爽影院榴莲视频 | 香蕉视频国产精品 | 久久6699精品国产人妻 | 黄色片网站下载 | 欧美含羞草免费观看全部完 | 国产睡熟迷奷系列网站 | 国产91青青成人a在线 | 亚洲AV色香蕉一区二区三区 | 中国明星16xxxxhd | 97国产露脸精品国产麻豆 | 日韩精品 中文字幕 有码 | 欧美久久综合性欧美 | 日韩欧美中文字幕在线二视频 | 亚洲成人一区 | 嘟嘟嘟影院免费观看视频 | 黑丝女仆恋上我 | 成人动漫百度影音 | 99国产精品偷窥熟女精品视频 | 最近中文字幕2019免费版 | 三级黄色片免费观看 |