学编程做网站,wordpress用户注册审核,个人承接网站开发项目,做商城网站要什么证件给定两个字符串 *s* 和 *t* #xff0c;编写一个函数来判断 *t* 是否是 *s* 的字母异位词。
注意#xff1a;若 *s* 和 *t* 中每个字符出现的次数都相同#xff0c;则称 *s* 和 *t* 互为字母异位词。 示例 1:
输入: s anagram, t nagaram
输出:…给定两个字符串 *s* 和 *t* 编写一个函数来判断 *t* 是否是 *s* 的字母异位词。
注意若 *s* 和 *t* 中每个字符出现的次数都相同则称 *s* 和 *t* 互为字母异位词。 示例 1:
输入: s anagram, t nagaram
输出: true
示例 2:
输入: s rat, t car
输出: false
数组其实就是一个简单哈希表而且这道题目中字符串只有小写字符那么就可以定义一个数组来记录字符串s里字符出现的次数。
需要定义一个多大的数组呢定一个数组叫做record大小为26 就可以了初始化为0因为字符a到字符z的ASCII也是26个连续的数值。
为了方便举例判断一下字符串s aee, t eae。
定义一个数组叫做record用来上记录字符串s里字符出现的次数。
需要把字符映射到数组也就是哈希表的索引下标上因为字符a到字符z的ASCII是26个连续的数值所以字符a映射为下标0相应的字符z映射为下标25。
再遍历 字符串s的时候只需要将 s[i] - ‘a’ 所在的元素做1 操作即可并不需要记住字符a的ASCII只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数统计出来了。
那看一下如何检查字符串t中是否出现了这些字符同样在遍历字符串t的时候对t中出现的字符映射哈希表索引上的数值再做-1的操作。
那么最后检查一下record数组如果有的元素不为零0说明字符串s和t一定是谁多了字符或者谁少了字符return false。
最后如果record数组所有元素都为零0说明字符串s和t是字母异位词return true。
时间复杂度为O(n)空间上因为定义是的一个常量大小的辅助数组所以空间复杂度为O(1)。
解
class Solution {public boolean isAnagram(String s, String t) {int[] record new int[26];for (int i 0; i s.length(); i) {record[s.charAt(i) - a]; // 并不需要记住字符a的ASCII只要求出一个相对数值就可以了}for (int i 0; i t.length(); i) {record[t.charAt(i) - a]--;}for (int count: record) {if (count ! 0) { // record数组如果有的元素不为零0说明字符串s和t 一定是谁多了字符或者谁少了字符。return false;}}return true; // record数组所有元素都为零0说明字符串s和t是字母异位词}
}