[LeetCode ] Valid Anagram

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GYH0730/article/details/84138997

Given two strings s and , 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;
}

猜你喜欢

转载自blog.csdn.net/GYH0730/article/details/84138997