Leetcode 242.有效的字母异位词(哈希表)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 242.有效的字母异位词(哈希表)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
傳送門:力扣
給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來(lái)判斷 t 是否是 s 的字母異位詞。
注意:若?s 和 t?中每個(gè)字符出現(xiàn)的次數(shù)都相同,則稱?s 和 t?互為字母異位詞。
示例?1:輸入: s = "anagram", t = "nagaram"? ? 輸出: true
示例 2:輸入: s = "rat", t = "car"? ?輸出: false
用暴力枚舉兩層for循環(huán)的時(shí)間復(fù)雜度是O(n*n)
用哈希表的時(shí)間復(fù)雜度是O(1)
用哈希表來(lái)保存s字符串所有字符的出現(xiàn)次數(shù),有點(diǎn)類似之前接觸的桶排序思想。再進(jìn)行t字符串所有字符的出現(xiàn)。操作是做兩個(gè)for循環(huán)去分別循環(huán)s,t字符串。s字符串出現(xiàn)的所有字符hash保存自增,t字符串出現(xiàn)的所有字符在hash中進(jìn)行自減操作,之后在單對(duì)hash表檢索是否有元素不是0.
大開眼界的是string是用字符數(shù)組封裝的,所以也可以直接使用? 字符串名稱.size()來(lái)獲取字符串長(zhǎng)度。非常方便。
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std;class Solution { public:bool isAnagram(string s, string t) {int record[26] = { 0 };for (int i = 0; i < s.size(); i++) {// 并不需要記住字符a的ASCII,只要求出一個(gè)相對(duì)數(shù)值就可以了record[s[i] - 'a']++;}for (int i = 0; i < t.size(); i++) {record[t[i] - 'a']--;}for (int i = 0; i < 26; i++) {if (record[i] != 0) {// record數(shù)組如果有的元素不為零0,說(shuō)明字符串s和t 一定是誰(shuí)多了字符或者誰(shuí)少了字符。return false;}}// record數(shù)組所有元素都為零0,說(shuō)明字符串s和t是字母異位詞return true;} }; int main() {Solution solution;cout << solution.isAnagram("anagram", "nagaram") << endl;cout << solution.isAnagram("cat", "mat") << endl; }總結(jié)
以上是生活随笔為你收集整理的Leetcode 242.有效的字母异位词(哈希表)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中数组的打印
- 下一篇: z变换判断稳定性和因果性_图像处理的仿射