【发布时间】:2016-03-29 14:05:20
【问题描述】:
每个测试用例将包含一个长度为 len(S1)+len(S2) 的字符串,这将是两个字符串的串联。给定的字符串将仅包含从 a 到 z 的字符。
任务:
找出第一个字符串的最少字符数(这将是给定字符串的前半部分)更改为使其成为第二个字符串的变位词。(这将是给定字符串的后半部分)。
输入:
aaabbb
输出:3
因为需要将 3 a(s) 替换为 3 b(s) 才能使 string1(aaa) 成为 string2(bbb) 的字谜
我的方法:
如果字符串长度不是偶数..那么前半部分不能是后半部分的字谜...那么print -1。
否则:
我计算每个字母表的字符数并将其存储为一个包含 26 个元素的数组。表示从 a-z 开始的每个字母表的重复次数。
我为 2 个字符串创建了 2 个这样的数组。
3.我检查两个数组以打印需要更改的字符数。由于我需要将第一个字符串作为第二个字符串的字谜。我将检查两个数组。
Firststring[i] > SecondString[i] ...递增计数!
这种方法需要 o(n^2) 时间。 (遍历每个字符串并为每个字符串形成数组)。
我需要一个更好的解决方案!
【问题讨论】:
-
提示:如果对单词的字母进行排序会发生什么?
-
使用地图而不是数组来存储每个字母的重复?
-
@JonSkeet ... 排序一个单词然后?
-
不,只是使用一个字符串...例如将“apple”映射到“aelpp”。考虑一下对互为字谜的单词这样做的结果。当然,这只有助于“检查两个单词是否是字谜”——而不是更大的任务。我不太关注更大的任务,部分原因是你没有给出任何例子。
-
嗯好吧!但是排序并没有给出优化的解决方案?
标签: optimization anagram