首页 > 编程语言 >(算法)判断是否互为字符重排——<哈希表>

(算法)判断是否互为字符重排——<哈希表>

时间:2024-06-09 20:31:39浏览次数:29  
标签:hash int s2 s1 互为 哈希 重排 字符串

1. 题⽬链接:⾯试01.02.判定是否互为字符重排

2. 题⽬描述:

3. 解法(哈希表):  

算法思路: 

1. 当两个字符串的⻓度不相等的时候,是不可能构成互相重排的,直接返回false ;

2. 如果两个字符串能够构成互相重排,那么每个字符串中「各个字符」出现的「次数」⼀定是相同 的。因此,我们可以分别统计出这两个字符串中各个字符出现的次数,然后逐个⽐较是否相等即 可。这样的话,我们就可以选择「哈希表」来统计字符串中字符出现的次数。  

C++算法代码:

class Solution 
{
public:
    bool CheckPermutation(string s1, string s2) 
    {
        int hash[26];   //记录26个小写字母出现的次数
        //记录出现的次数
        for(int i=0;i<s1.size();i++)
        {
            hash[s1[i]-'a']++;
        }
        //两个重排的字符串元素出现的次数应该是相等的,所以相减应该是0
        for(int i=0;i<s2.size();i++)
        {
            hash[s2[i]-'a']--;
        }
        //若有结果不是0的则不是
        for(int i=0;i<26;i++)
        {
            if(hash[i]!=0)
            {
                return false;
            }
        }
        return true;
    }
};

 Java算法代码:

class Solution
{
	public boolean CheckPermutation(String s1, String s2)
	{
		if (s1.length() != s2.length()) return false;
		int[] hash = new int[26];
		// 先把第⼀个字符串的信息统计到哈希表中 
		for (int i = 0; i < s1.length(); i++)
		{
			hash[s1.charAt(i) - 'a']++;
		}
		// 遍历第⼆个字符串,判断是否可以重排 
		for (int i = 0; i < s2.length(); i++)
		{
			hash[s2.charAt(i) - 'a']--;
			if (hash[s2.charAt(i) - 'a'] < 0) return false;
		}
		return true;
	}
}

标签:hash,int,s2,s1,互为,哈希,重排,字符串
From: https://blog.csdn.net/2301_79580018/article/details/139565684

相关文章

  • 哈希桶封装unordered_map、unordered_set
    哈希桶源代码我们将由下列的哈希桶来模拟封装STL库中的unordered_map和unordered_set注意:为了实现封装unordered_map和unordered_set,我们需要对下列源码进行优化。//哈希桶namespacehashbucket{template<classK,classV>structHashNode{HashNo......
  • 6.8哈希表
    1.两数之和题意描述:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:n......
  • 6.7哈希表
    哈希表哈希表(英文名字为Hashtable,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hashtable就可以了)。哈希表是根据关键码的值而直接进行访问的数据结构。数组就是一张哈希表。哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。那么哈......
  • C++数据结构之:哈希表Hash
    摘要:  it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储......
  • 2024墨者杯哈希sha1绕过
    题目描述:某开发者发现这个页面好像不能正常访问<?phperror_reporting(0);if($_SERVER['REQUEST_METHOD']!=='POST'){header("HTTP/1.1405MethodNotAllowed");exit();}else{if(!isset($_POST['roam1'])||!isset($_PO......
  • 代码随想录算法训练营第五天 | 哈希表基础、有效字母异位、两个数组交集、快乐数
    哈希表基础理论https://programmercarl.com/哈希表理论基础.html#哈希表242有效字母异位词题https://leetcode.cn/problems/valid-anagram/description/242代码随想录解析https://programmercarl.com/0242.有效的字母异位词.html#算法公开课349两个数组的交集https://leetc......
  • 算法基础之哈希表
    大家好,这里是教授.F什么是哈希表:   哈希表其实就是数组的pro版本。数组有下标,每个下标对应着一个值。哈希表也类似,哈希表有很多哈希值,然后每一个哈希值都会对应着一个值。就是这样:hash(key)哈希表的要求:    1.key必须是不变的。这点非常重要。所谓不可变类......
  • 哈希校验
    哈希校验的工具包有两个系列,一个是GNU系的md5sum、shaXXXsum,另一个是BSD/macOS系的md5、shasum。GNU系计算md5sum<file>sha1sum<file>sha256sum<file>sha512sum<file>例:sha256sum*>SHA256SUMS#将目录中所有文件的SHA-256校验和写到SHA256SUMS文件中......
  • 《java数据结构》--哈希表
    ......
  • 【LeetCode:575. 分糖果+ 哈希表】
    ......