判断字符串是否是异位词

s="anagram", t="nagaram"
这就属于异位词,长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同而已
s="rat",t="car"
这种就不属于异位词,因为s中的‘r‘在t中没有
思路:
1 首先看字符串长度是否一样,不一样则为false
2 看每个字符出现的频率是否一样,可以用到hash表。申请一个26长度的int数组。首先遍历字符串s然后,将每个字符串
换算成索引后存入数组,并同时进行计数
3 遍历字符串t,然后依次对字符对对应的数组值减一,如果出现小于0的情况则说明不匹配
代码如下:

int isAnagram(char *s, char *t)
{
	int freq[26];
	int i, j,len_s, len_t,value;
	len_s = strlen(s);
	len_t = strlen(t);
	value = 0;
	memset(freq, 0, 26*4);
	if (len_s != len_t)
		return -1;
	for (i = 0; i < len_s; i++)
	{
		freq[*(s + i) - ‘a‘]+=1;
	}
	for (j = 0; j < len_t; j++)
	{
		freq[*(t + j) - ‘a‘]-=1;
		value = freq[*(t + j) - ‘a‘];
		if (value < 0)
			return -1;
	}
	return 1;

}

  

原文地址:https://www.cnblogs.com/zhanghongfeng/p/11539970.html

时间: 2024-10-28 02:52:53

判断字符串是否是异位词的相关文章

CareerCup之1.4判断字符串是否为变位词

[题目] 原文: 1.4 Write a method to decide if two strings are anagrams or not. 译文: 写一个函数判断两个字符串是否是变位词. [分析] 变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词.比如说, abbcd和abcdb就是一对变位词.该题目有两种思路: [思路一] 由于变位词只是字母的顺序改变,字符长度,字符种类没有改变,所以根据此我们只要重新根据字典序排序一下,两个字符串也就一样了. The eyes

【leetcode-49】字母异位词分组

给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["ba

判断两个字符串是否是变位词 (keep it up)

写一个函数判断两个字符串是否是变位词.变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词.比如说, abbcd和abcdb就是一对变位词 这也是简单的题. 我们可以排序然后对比, 也可以直接统计字符出现的个数来判断.这里给出统计字符来判断的代码: bool isAnagram1(const string& vLeft, const string& vRight) { if (vLeft.size() != vRight.size()) return false; in

字符串问题----判断两个字符串是否互为变形词

判断两个字符串是否互为变形词 给定两个字符串 str1 和str2 ,如果两个字符串中出现的字符种类一样,次数也一样,则互为变形词,实现一个函数判断两个字符串是否互为变形词.例如 str1="123",str2="132",true; str1="123",str2="1332",false; [解题思路] 1. 首先比较两个字符串的长度,长度不同肯定是false. 2. 如果长度相同,新建一个数组,用以存储每个字符出现次数.

leetcode 438. 找到字符串中所有字母异位词(Find All Anagrams in a String)

目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. 说明: 字母异位词指字母相同,但排列不同的字符串. 不考虑答案输出的顺序. 示例 1: 输入: s: "cbaebabacd" p: "abc" 输出: [0, 6] 解释: 起始索引等于 0 的子串是 "

[LeetCode]438. 找到字符串中所有字母异位词

题目 给定一个字符串?s?和一个非空字符串?p,找到?s?中所有是?p?的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串?s?和 p?的长度都不超过 20100. 说明: 字母异位词指字母相同,但排列不同的字符串. 不考虑答案输出的顺序. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明

c++滑动窗口进阶版求找到字符串中所有字母异位词

/** * 问题:找到字符串中所有字母异位词 * 要求:给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. * 注意事项:字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. * 方法1:利用滑动数组去做 * class Solution { private: vector<int>list; int a[26]={0}; int b[26]={0}; public: vector<int> fi

leetcode 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 说明: 你可以假设字符串只包含小写字母. 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况? /** * @param {st

初级算法15.有效的字母异位词

题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 说明: 你可以假设字符串只包含小写字母 分析:此题就是判断两个字符串是否由相同的字符组成(每个字符出现的次数相同,顺序不管) 由于只包含小写字母,则可以用