文章目录
- 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阿明),一起加油、一起学习进步!