成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

哈希表妙解字母異位詞

開發 前端
今天給大家帶來一道與哈希表相關的題目,這道題同時也是微軟、字節、谷歌和亞馬遜等互聯網大廠的面試題,即力扣上第242題-有效的字母異位詞。

[[413065]]

本文轉載自微信公眾號「程序員小熊」,作者程序員小熊。轉載本文請聯系程序員小熊公眾號。

前言

大家好,我是來自于華為的程序員小熊。今天給大家帶來一道與哈希表相關的題目,這道題同時也是微軟、字節、谷歌和亞馬遜等互聯網大廠的面試題,即力扣上第242題-有效的字母異位詞。

本文主要介紹哈希表的策略來解答此題,供大家參考,希望對大家有所幫助。

有效的字母異位詞

  1. 給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的字母異位詞。 
  2.  
  3. 注意:若 s 和 t 中每個字符出現的次數都相同,則稱 s 和 t 互為字母異位詞。 
  4.  
  5.  
  6. 示例 1: 
  7.  
  8. 輸入: s = "anagram", t = "nagaram" 
  9. 輸出: true 
  10.  
  11. 示例 2: 
  12.  
  13. 輸入: s = "rat", t = "car" 
  14. 輸出: false 
  15.   
  16.  
  17. 提示: 
  18.  
  19. 1 <= s.length, t.length <= 5 * 104 
  20. s 和 t 僅包含小寫字母 

解題思路

字母異位詞:由相同的字母按照不同的順序組成的單詞。

根據上述字母異位詞的定義可知,兩個字符串要互為字母異位詞,則必須滿足一下兩個條件:

  • 長度相等;
  • 相同字符出現的次數相同。

凡是涉及到字母出現的頻次的相關問題,都可以考慮用哈希表去求解,可以以字母為哈希表的key,字母出現的次數作為哈希表的value。

舉例

以判斷 s = "anagram" 和 t = "nagaram" 是否互為字母異位詞為例子,如下圖示。

例子

定義一個數組(C 語言用數組模擬哈希表)或哈希表(C++ 等語言),以 s[i] - 'a' 作為哈希表的 key,以 s[i] 在字符串 s 中出現的次數作為 value;

哈希表

遍歷字符串 s 和 t,遇到 s 中的字符時,對哈希表中記錄的 value 加 1,否則減 1;

對字符串 s 中的字符的處理

對字符串 t 中的字符的處理

以此類推,采用哈希表的策略的完整處理過程,如下動圖示:

哈希表處理完整過程

Show me the Code

C

  1. bool isAnagram(char * s, char * t){ 
  2.     /* 判斷字符串是否為空,為空則不能用 strlen 求長度 */ 
  3.     if (s == NULL && t == NULL) { 
  4.         return true
  5.     } else if (s == NULL && t != NULL || s != NULL && t == NULL) { 
  6.         return false
  7.     /* 兩個非空字符串長度不等,肯定不互為字母異位詞 */ 
  8.     } else if (strlen(s) != strlen(t)){ 
  9.         return false
  10.     } 
  11.      
  12.     /* 數組模擬哈希表 */ 
  13.     char hash[26] = {0}; 
  14.     for (int i = 0; s[i] != '\0'; ++i) { 
  15.         hash[s[i] - 'a']++; 
  16.         hash[t[i] - 'a']--; 
  17.     } 
  18.  
  19.     for (int i = 0; i < 26; ++i) { 
  20.         if (hash[i] != 0) { 
  21.             return false
  22.         } 
  23.     } 
  24.  
  25.     return true

C++

  1. bool isAnagram(string s, string t) { 
  2.     if (s.length() != t.length()) { 
  3.         return false
  4.     } 
  5.  
  6.     int len = s.length(); 
  7.     unordered_map<intint> record; 
  8.     for (int i = 0; i < len; ++i) { 
  9.         record[s[i] - 'a']++; 
  10.         record[t[i] - 'a']--; 
  11.     } 
  12.  
  13.     for (int i = 0; i < 26; ++i) { 
  14.         if (record[i] != 0) { 
  15.             return false
  16.         } 
  17.     } 
  18.      
  19.     return true

Java

  1. boolean isAnagram(String s, String t) { 
  2.     if (s.length() != t.length()) { 
  3.         return false
  4.     } 
  5.  
  6.     int[] hash = new int[26]; 
  7.     for (int i = 0; i < s.length(); i++) { 
  8.         hash[s.charAt(i) - 'a']++; 
  9.         hash[t.charAt(i) - 'a']--; 
  10.     } 
  11.  
  12.     for (int i : hash) { 
  13.         if (i != 0) { 
  14.             return false
  15.         } 
  16.     } 
  17.  
  18.     return true

Python3

  1. def isAnagram(self, s: str, t: str) -> bool: 
  2.     if len(s) != len(t): 
  3.         return False 
  4.  
  5.     hash = [0]*26 
  6.     for i in range(len(s)): 
  7.         hash[ord(s[i]) - ord("a")] += 1 
  8.     for i in range(len(t)): 
  9.         hash[ord(t[i]) - ord("a")] -= 1 
  10.  
  11.     for i in range(26): 
  12.         if hash[i] != 0: 
  13.             return False 
  14.              
  15.     return True 

Golang

  1. func isAnagram(s string, t string) bool { 
  2.   if len(s) != len(t) { 
  3.     return false 
  4.   } 
  5.  
  6.   var hash [26]int 
  7.   for i := range s { 
  8.     hash[s[i] - 'a']++ 
  9.     hash[t[i] - 'a']-- 
  10.   } 
  11.  
  12.   for _, v := range hash { 
  13.     if v != 0 { 
  14.       return false 
  15.     } 
  16.   } 
  17.    
  18.   return true 

復雜度分析

時間復雜度:O(n),其中 n 是字符串的長度,需要遍歷一遍字符串。

空間復雜度:O(S),其中 S 為字符集大小,S = 26。

 

責任編輯:武曉燕 來源: 程序員小熊
相關推薦

2021-04-29 10:08:10

數據結構哈希表

2010-07-16 13:10:36

Perl哈希表

2023-11-24 17:58:03

Python哈希

2017-06-01 10:44:29

2010-07-13 16:34:34

Perl 哈希表

2024-10-16 11:03:30

Linux高性能編程

2023-02-13 08:02:08

哈希函數哈希表搜索樹

2009-03-13 13:58:10

Javascript哈希表偽哈希表

2009-08-20 17:17:02

C#哈希表

2024-11-07 08:47:53

2013-10-10 10:34:47

哈希算法

2010-07-13 16:20:21

Perl 哈希表

2010-07-16 13:57:13

Perl哈希表

2017-07-27 14:21:40

phpPHP源碼分析hashtable

2022-06-06 08:16:16

RedisJavaHaspM

2010-10-14 16:34:41

MySQL查詢

2009-04-27 21:28:56

2024-08-05 09:42:05

2010-07-19 09:28:37

Perl關聯數組

2016-12-21 10:35:55

PHP內核PHP哈希表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人一区二区三区片免费 | 日韩在线播放网址 | 国产乱精品一区二区三区 | 国产精品视频久久久久久 | 亚洲人成一区二区三区性色 | 在线观看成人精品 | 久久久人成影片免费观看 | 日本欧美国产在线观看 | 视频在线一区二区 | 久草网址| 国产精品69毛片高清亚洲 | 亚州一区二区三区 | 久久久成人精品 | 免费精品 | 免费成人高清在线视频 | 综合久久99 | 中文字幕加勒比 | 亚洲精品中文字幕 | 国产精品久久久久久久久久久新郎 | 蜜臀久久99精品久久久久久宅男 | 成人免费视频久久 | 黄网免费看 | 中文字幕视频在线 | 亚洲一区中文字幕 | 色频| 色吧综合网 | 91在线免费视频 | 国产精品一区二区三区免费观看 | 国产精品一区免费 | 天天艹天天干天天 | 国产精品久久久久久久久久久久冷 | 日韩国产中文字幕 | 久久日韩精品一区二区三区 | 久久男人 | 国产在线精品免费 | 久久成人免费视频 | 韩国av电影网 | 国产精品久久精品 | 玖玖国产精品视频 | 久久久五月天 | 国产精品国产三级国产aⅴ中文 |