leetcode刷题记录之242

mac2024-05-13  36

242、有效的字母异位词

  给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1:

输入: s = "anagram", t = "nagaram" 输出: true

示例 2:

输入: s = "rat", t = "car" 输出: false

说明: 你可以假设字符串只包含小写字母。 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

难度:简单  题目地址:https://leetcode-cn.com/problems/valid-anagram/

1、C语言代码:

//解法一 int inc (const void * a,const void *b){ return * (char * )a-* (char *)b; } bool isAnagram(char * s, char * t){ int c1=0,c2=0; for(int i=0;s[i]!='\0';i++){ c1++; } for(int i=0;t[i]!='\0';i++){ c2++; } qsort(s,c1, sizeof(char), inc); qsort(t,c2, sizeof(char), inc); if(c1!=c2) return false; else for(int i=0;i<=c1;i++){ if(s[i]!=t[i]) return false; } return true; } //解法二 bool isAnagram(char * s, char * t){ int n=strlen(s),m=strlen(t); if(n!=m) return false; int a[26]={0}; for(int i=0;i<n;i++){ a[s[i]-'a']++; a[t[i]-'a']--; } for(int i=0;i<26;i++) if(a[i]!=0) return false; return true; }

解释: 解法一:排序。通过将 s 的字母重新排列成 t 来生成变位词。因此,如果 T 是 S 的变位词,对两个字符串进行排序将产生两个相同的字符串。此外,如果 s 和 t 的长度不同,t 不能是 s 的变位词,我们可以提前返回。 解法二:先判断两字符串长度是否相等,若不相等则false,若相等则将两字符串中每种字母的个数做差,若结果为0则true,不为0则false。

知识点回顾: 无。

2、Java代码:

class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } int[] counter = new int[26]; for (int i = 0; i < s.length(); i++) { counter[s.charAt(i) - 'a']++; counter[t.charAt(i) - 'a']--; } for (int count : counter) { if (count != 0) { return false; } } return true; } }

解释:

为了检查 t 是否是 s 的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 S 和 T 都只包含 A−Z 的字母,所以一个简单的 26 位计数器表就足够了。我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 s 字母的频率,用 t 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。

知识点回顾: 哈希表的相关知识。

3、Python代码:

class Solution: def isAnagram(self, s: str, t: str) -> bool: return sorted(s) == sorted(t)

解释: 类似于C语言的解法一。

知识点回顾: 无。

4、JavaScript代码:

/** * @param {string} s * @param {string} t * @return {boolean} */ var isAnagram = function(s, t) { if (s.length !== t.length) return false return s.split('').sort().join('') === t.split('').sort().join('') };

解释: 类似于C语言的解法一。

知识点回顾: 无。

最新回复(0)