国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    2315

    瀏覽量

    98170
  • 字母
    +關注

    關注

    0

    文章

    2

    瀏覽量

    7220
  • 字符串
    +關注

    關注

    1

    文章

    596

    瀏覽量

    23165

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    求助 LabVIEW 字符串比較

    1.輸入一個字符串,儲存起來。 2.再次輸入一個字符串,先和儲存起來的字符串比較,如果不同則存儲起來,如果相同則不儲存。 3.再次輸入一個字符串,和所有儲存起來的
    發表于 03-02 17:24

    打開工程后工程的字體沒有顯示,如字符串,數字等控件不能預覽顯示字體?

    打開工程后工程的字體沒有顯示,如字符串,數字等控件不能預覽顯示字體?
    發表于 02-25 17:39

    字符串控件與靜態字符串控件預覽字符顯示亂碼,如何修改顯示正常?

    字符串控件與靜態字符串控件預覽字符顯示亂碼,如何修改顯示正常?
    發表于 01-20 17:17

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

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

    單片機的串口通訊串行同步通信與串行異步通信

    就保證了起始位開始處定會有個下跳沿,由此就可以標志一個字符傳輸的起始。而根據起始位和停止位也就很容易的實現了字符的界定和同步。 顯然,采用異步通信時,發送端和接收端可以由各自的
    發表于 01-15 08:06

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

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

    字符串關聯數字變量如何使用?我們的地址都是16位數據,可以使用16位數字變量顯示字符串嗎?

    字符串關聯數字變量如何使用?我們的地址都是16位數據,可以使用16位數字變量顯示字符串嗎?
    發表于 12-15 08:24

    飛凌嵌入式ElfBoard-標準IO接口之格式化輸入

    字符,格式說明符除外(%):任何不是空格字符(空白、換行符或制表符)或格式說明符(以%字符開頭)的字符都會導致函數從流讀取下
    發表于 11-12 08:35

    RISC-V的工具鏈GCC內聯匯編

    ;;\"作為分隔符,沒有添加分隔符的兩個字符串會被合并成為一個字符串。“匯編指令列表”的編寫語法和普通的匯編程編寫是樣的。 4.\"輸入操作數\",用來指定當前內聯匯編程序的輸入
    發表于 10-30 06:59

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

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

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

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

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

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

    英語單詞學習頁面+單詞朗讀實現 -- 【1】頁面實現 ##HarmonyOS SDK AI##

    Speech Kit(基礎語音服務),即端側AI 我們分篇文章來講解 對于例句單詞效果突出顯示,開始我想到的是“屬性字符串StyledString/MutableStyledString”。 通過閱讀相關
    發表于 06-29 23:24

    請問STM32MP135 I2C MemAddress最多兩個字節嗎?

    MP135的I2C底層讀寫函數里面對于MemAddress做了限制, 最多兩個字節的MemAddress, 這是MP135的硬件限制 還是 單純的在功能的實現上做了限制? 我現在對接的設備 他必須要三字節的MemAddress,怎么辦呢
    發表于 03-14 08:23

    求助,關于STM32口Bootloader的兩個問題求解

    串口Bootloader兩個問題: 1.APP和Bootloader對于串口的初始化以及中斷處理函數的定義是否需要保持一致,特別是有關接收和發送的緩沖區? 2.Bootloader
    發表于 03-12 07:17