前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1153. 字符串转化(哈希)

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

作者头像
Michael阿明
发布2021-02-19 11:13:33
9160
发布2021-02-19 11:13:33
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

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

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

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

代码语言:javascript
复制
示例 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. 解题

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档