网站界面设计和ios移动界面设计的区别,网站的国际化 怎么做,设计素材网站能挣钱吗,上海公司买新能源车需要什么条件题目要求
如果可以使用以下操作从另一个字符串获得一个字符串#xff0c;则认为两个字符串是接近的#xff1a;
操作1#xff1a;交换任意两个现有字符。 例如#xff0c;abcde - aecdb操作2#xff1a;将每个出现的一个现有字符转换为另一个现有字符#xff0c;并…题目要求
如果可以使用以下操作从另一个字符串获得一个字符串则认为两个字符串是接近的
操作1交换任意两个现有字符。 例如abcde - aecdb操作2将每个出现的一个现有字符转换为另一个现有字符并对另一个字符执行相同操作。 例如aacabb - bbcbaa所有a都变成b所有b都变成a
您可以根据需要多次对任一字符串使用这些操作。 给定两个字符串word1 和 word2如果 word1 和 word2 接近则返回 true否则返回 false。
Example 1:
Input: word1 abc, word2 bca
Output: true
Explanation: You can attain word2 from word1 in 2 operations.
Apply Operation 1: abc - acb
Apply Operation 1: acb - bcaExample 2:
Input: word1 a, word2 aa
Output: false
Explanation: It is impossible to attain word2 from word1, or vice versa, in any number of operations.Example 3:
Input: word1 cabbba, word2 abbccc
Output: true
Explanation: You can attain word2 from word1 in 3 operations.
Apply Operation 1: cabbba - caabbb
Apply Operation 2: caabbb - baacccApply Operation 2: baaccc - abbccc
思路
两个字符串相似的定义是“通过无限的操作能够互相得到”因此我们似乎并不需要记住字母的顺序只需要记住字母出现的次数即可。用到哈希表。
操作1交换任意两个现有字符。 例如abcde - aecdb
很明显操作1中的操作并不改变字母的数量但是可以1对1操作字母顺序。因此只要两个字符串每个字母出现的数量一致都可以通过操作1互相转换。
操作2将每个出现的一个现有字符转换为另一个现有字符并对另一个字符执行相同操作。 例如aacabb - bbcbaa所有a都变成b所有b都变成a
操作2交换不同字母的个数也就是说我们甚至不需要准确的记录每个对应每个字母出现的次数只要记录出现次数的list能对应上就可以。(但是统计个数也需要用哈希表来完成)
另外在获得map1和map2之后还需要判断一下二者的键是否都匹配因为不存在的字母之间是无法互相转换的。
代码
class Solution {
public:bool closeStrings(string word1, string word2) {mapchar, int map1, map2;if (word1.size() ! word2.size()) {return false;}for (int i 0; i word1.size(); i) {map1[word1[i]] 1;map2[word2[i]] 1;}for (auto p : map1) {if (map2.find(p.first) map2.end()) return false;}for (auto p : map2) {if (map1.find(p.first) map1.end()) return false;}vectorint values1, values2;for (auto p : map1) values1.push_back(p.second);for (auto p : map2) values2.push_back(p.second);sort(values1.begin(), values1.end());sort(values2.begin(), values2.end());return values1 values2;}
};
时间复杂度 映射字符 O(N)其中 N 是字符串的长度。 检查字符是否存在 O(N)假设映射操作为 O(log N)且最多有 N 个唯一字符。 排序频率 O(N log N)因为频率排序最差也要对 N 个元素进行排序。 总体时间复杂度 O(N log N)主要是排序步骤。
空间复杂度 频率计数映射 O(N)用于存储字符频率。频率向量 O(N)用于存储频率的两个向量。整体空间复杂度O(N) O(N)因为所用空间与唯一字符数成正比最多为 N。