Leetcode Answers 242

继续刷题,看了一眼Sliding Window Max,然后发现我看不懂其他人的答案,所以先放一边。先往下做242,这是最简单的Anagram的问题。

题目:
Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = “anagram”, t = “nagaram”, return true.
s = “rat”, t = “car”, return false.

Note:
You may assume the string contains only lowercase alphabets.

Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?

思路:
两个string比对是不是anagram,说白了就是对各自的字符进行统计,然后看统计结果是否一致,而如果一致,就相当于这边数出来的数字,放在那一边每数出来一个减去一个,最后应该是归零的。这道题说的是都是小写字母,可以说是最简单的形式了。用一个int[26] 来保存26个字母出现的频次,先加再减,保证归零就好了。Follow up题道了如果有unicode字符怎么办?那就是把int换成Dicitonary而已,一样的道理。

Answer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Solution {
public bool IsAnagram(string s, string t) {
if(s.Length != t.Length) return false;
int[] charmap = new int[26];
for(int i=0;i<s.Length;i++){
charmap[s[i]-'a']++;
}
for(int i=0;i<t.Length;i++){
charmap[t[i]-'a']--;
if(charmap[t[i]-'a'] < 0) return false;
}
int sum = 0;
for(int i=0;i<26;i++){
sum+= charmap[i];
}
return sum == 0;
}
}

以上。

17-04-26
@Sturbridge