LeetCode 1153. 字符串转化(哈希)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给出两个长度相同的字符串,分别是 str1 和 str2。请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化后变成字符串 str2。

每一次转化时,将会一次性将 str1 中出现的 所有 相同字母变成其他 任何 小写英文字母(见示例)。

只有在字符串 str1 能够通过上述方式顺利转化为字符串 str2 时才能返回 True,否则返回 False。​​

示例 1:
输入:str1 = "aabcc", str2 = "ccdee"
输出:true
解释:将 'c' 变成 'e',然后把 'b' 变成 'd',
接着再把 'a' 变成 'c'。注意,转化的顺序也很重要。

示例 2:
输入:str1 = "leetcode", str2 = "codeleet"
输出:false
解释:我们没有办法能够把 str1 转化为 str2。
 
提示:
1 <= str1.length == str2.length <= 10^4
str1 和 str2 中都只会出现 小写英文字母

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-transforms-into-another-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution {
public:
    bool canConvert(string str1, string str2) {
    	if(str1 == str2) return true;
    	unordered_map<char, char> m1_2;
    	int count = 0;
    	vector<bool> alp(26, false);
    	for(int i = 0; i < str2.length(); ++i)
    	{
    		if(!alp[str2[i]-'a'])
    		{
    			alp[str2[i]-'a'] = true;
    			count++;
    		}
    	}//统计str2的字符种类
    	if(count == 26) return false;
    	//两字符串不相等,且后者有26种字符肯定有冲突
    	// "aacdefghijklmnopqrstuvwxyz"
		// "abcdefghijklmnopqrstuvwxyz"
		
		for(int i = 0; i < str1.length(); ++i)
		{
			if(!m1_2.count(str1[i]))
				m1_2[str1[i]] = str2[i];
			else if(m1_2[str1[i]] != str2[i])
				return false;
		}
    	return true;
    }
};

8 ms 7.8 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

你可能感兴趣的:(LeetCode)