題目:
給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的字母異位詞。
注意:若s 和 t中每個(gè)字符出現(xiàn)的次數(shù)都相同,則稱s 和 t互為字母異位詞。
示例1:
輸入: s = "anagram", t = "nagaram"
輸出: true
示例 2:
輸入: s = "rat", t = "car"
輸出: false
提示:
1 <= s.length, t.length <= 5 * 104
s 和 t僅包含小寫字母
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/valid-anagram
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、德欽網(wǎng)絡(luò)推廣、小程序開發(fā)、德欽網(wǎng)絡(luò)營銷、德欽企業(yè)策劃、德欽品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供德欽建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:chinadenli.net
對(duì)于這樣的題,解題思路是:
在s中尋找構(gòu)成t的每個(gè)字符是否存在
1.特殊情況:如果兩者不相等,那么就不可能互為異位詞
2.通常情況:如果兩者相等,就需要對(duì)S中每個(gè)元素在t中尋找
假如S中有n個(gè)元素,t中有n個(gè)元素,那么就需要n*n次查找。(暴力的直接找)
對(duì)于這種的需要查找匹配的我可以考慮使用map,C++中STL的map是使用樹來做查找算法的。
原因:
1)用A B C等作為index不好進(jìn)行查找。
2)順序查找比較慢,效率低。
為了解決 1)
我們可以用數(shù)組解決----把字符轉(zhuǎn)為數(shù)組下標(biāo)作為index
(原理是:通過一個(gè)函數(shù)(字符-‘a(chǎn)’)就轉(zhuǎn)為index)
這樣的話其實(shí)和我們的哈希就對(duì)應(yīng)上了,所以說數(shù)組就是一個(gè)簡(jiǎn)單的哈希表。
bool isok(string s, string t) {
int ha[26]={0};
for(int i=0;i<s.size();i++)
ha[s[i]-'a']++;
for(int j=0;j<t.size();j++)
ha[t[j]-'a']--;
for(int i=0;i<26;i++)
if(ha[i]!=0)
return false;
return true;
}//這個(gè)相對(duì)于暴力解法O(n*n)來說,時(shí)間復(fù)雜度只有O(n)
2.map的解法
()
bool isok(string s, string t) {
if(s.size() != t.size()) return false;
map<char,int> MAP;
for(int i = 0; i<s.size(); i++){
MAP[s[i]] ++;
}
for(int i = 0; i<t.size(); i++){
MAP[t[i]] --;
if(MAP[t[i]] < 0) return false;
}
return true;
}
};
對(duì)第二種解法的補(bǔ)充:
首先我們介紹一下兩種編碼 **
1.最開始的ASCII--對(duì)應(yīng)了英語字符和二進(jìn)制的關(guān)系
2.后來為了改進(jìn),將世界上所有的字符都給包含進(jìn)去的Unicode**
通過這樣的介紹,可以知道如果按照第一種解法來做,那么局限性就很大了,編碼的不足夠,雖然在這種簡(jiǎn)單的題上,數(shù)組模擬(4ms)確實(shí)更快(map 20ms),但是不是通用,所以按需選擇吧。
文章題目:有效字母異位詞
鏈接地址:http://chinadenli.net/article0/dsoiiio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、定制網(wǎng)站、響應(yīng)式網(wǎng)站、用戶體驗(yàn)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容