242 有效的字母異位詞
給定兩個字符串 和 ,編寫一個函數(shù)來判斷 是否是 的字母異位詞。stts
注意:若 和 中每個字符出現(xiàn)的次數(shù)都相同,則稱 和 互為字母異位詞。stst
示例 1:
輸入: s = “anagram”, t = “nagaram”
輸出: true
示例 2:
輸入: s = “rat”, t = “car”
輸出: false
提示:
1 <= s.length, t.length <= 5 * 104
s 和 僅包含小寫字母t文章來源:http://www.zghlxwxcb.cn/news/detail-634041.html
解決方案:
提供思路
1)暴力解法,兩層for循環(huán),同時還要記錄字符是否重復出現(xiàn),時間復雜度是 O(n^2)。
2)數(shù)組其實就是一個簡單哈希表,而且這道題目中字符串只有小寫字符,那么就可以定義一個數(shù)組,來記錄字符串s里字符出現(xiàn)的次數(shù)。
需要定義一個多大的數(shù)組呢,定一個數(shù)組叫做record,大小為26 就可以了,初始化為0,因為字符a到字符z的ASCII也是26個連續(xù)的數(shù)值。
定義一個數(shù)組叫做record用來上記錄字符串s里字符出現(xiàn)的次數(shù)。
需要把字符映射到數(shù)組也就是哈希表的索引下標上,因為字符a到字符z的ASCII是26個連續(xù)的數(shù)值,所以字符a映射為下標0,相應的字符z映射為下標25。
再遍歷 字符串s的時候,只需要將 s[i] - ‘a(chǎn)’ 所在的元素做+1 操作即可,并不需要記住字符a的ASCII,只要求出一個相對數(shù)值就可以了。 這樣就將字符串s中字符出現(xiàn)的次數(shù),統(tǒng)計出來了。
那看一下如何檢查字符串t中是否出現(xiàn)了這些字符,同樣在遍歷字符串t的時候,對t中出現(xiàn)的字符映射哈希表索引上的數(shù)值再做-1的操作。
那么最后檢查一下,record數(shù)組如果有的元素不為零0,說明字符串s和t一定是誰多了字符或者誰少了字符,return false。
最后如果record數(shù)組所有元素都為零0,說明字符串s和t是字母異位詞,return true。
上代碼:
public class Solution
{
public bool IsAnagram(string s, string t)
{
int sl = s.Length, tl = t.Length;
if (sl != tl) return false;
int[] a = new int[26];
for (int i = 0; i < sl; i++)
{
a[s[i] - 'a']++;
a[t[i] - 'a']--;
}
foreach (int i in a)
{
if (i != 0)
return false;
}
return true;
}
}
以上是碰到的第二百四十二題,后續(xù)持續(xù)更新。感覺對你有幫助的小伙伴可以幫忙點個贊噢!文章來源地址http://www.zghlxwxcb.cn/news/detail-634041.html
到了這里,關于C# 有效的字母異位詞的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!