Given two strings s and t , write a function to determine if t is an anagram of s.
Example 1:
Input: s = "anagram", t = "nagaram" Output: true
Example 2:
Input: s = "rat", t = "car" Output: false
题意:给出两个字符串,判断两个字符串是否有相同的字符组合。
思路:
解法一:用一个数组记录字符串中的每个字符的出现次数,判断这两个数组是否相等
Java代码:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
int[] ss = new int[257];
int[] tt = new int[257];
int len = s.length();
Arrays.fill(ss, 0);
Arrays.fill(tt, 0);
for (int i = 0; i < len; i++) {
ss[s.charAt(i)] ++;
tt[t.charAt(i)] ++;
}
for(int i = 0; i < ss.length; i++) {
if(ss[i] != tt[i]) return false;
}
return true;
}
}
C代码:
bool isAnagram(char* s, char* t) {
int len1 = strlen(s);
int len2 = strlen(t);
if(len1 != len2) return false;
int i,ss[257],tt[257];
memset(ss,0,sizeof(ss));
memset(tt,0,sizeof(tt));
for(i = 0; i < len1; i++) {
ss[s[i]]++;
tt[t[i]]++;
}
for(i = 0; i < 256; i++) {
if(ss[i] != tt[i]) return false;
}
return true;
}
解法二:最两个字符串分别排序,再判断是否相等。
Java代码:
public class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
Arrays.sort(ss);
Arrays.sort(tt);
return String.valueOf(ss).equals(String.valueOf(tt));
}
}
C代码:
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
bool isAnagram(char* s, char* t) {
int len1 = strlen(s);
int len2 = strlen(t);
if(len1 != len2) return false;
qsort(s,len1,sizeof(char),cmp);
qsort(t,len2,sizeof(char),cmp);
return strcmp(s,t) == 0;
}