java - 无法理解这个字谜问题解决方案背后的逻辑

标签 java arrays data-structures anagram

给定两个字符串 a 和 b,其长度可能相同也可能不同,请确定制作 a 和 b 字谜词所需的最小字符删除数。可以从任一字符串中删除任何字符。

这是我第一次准备竞争性编程,理解两个for循环背后的逻辑对我来说相当困难。

String str1 = s.next();               
String str2 = s.next();
char []c1 = str1.toCharArray();
char []c2 = str2.toCharArray();
int []cnt1 = new int[26];
int []cnt2 = new int[26];

int len1 = str1.length();
for (int i = 0; i < len1; i++) {
    cnt1[c1[i] - 97]++;
}

int len2 = str2.length();
for (int i = 0; i < len2; i++) {
    cnt2[c2[i] - 97]++;
}

int cnt = 0;
for (int i = 0; i < 26; i++) {
    cnt += Math.abs(cnt2[i] - cnt1[i]);
}

System.out.println(cnt);

最佳答案

此代码片段遍历每个字符串并计算每个字母在其中出现的次数(并将计数器存储在数组中以获得更好的性能)。

然后它会遍历两个计数器数组,并为每个字母减去两个字符串的计数器(绝对值)。区别在于应删除的字符的数量。将这些差异相加,结果就是答案。

关于java - 无法理解这个字谜问题解决方案背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815990/

相关文章:

java - 使用递归的引脚金字塔

javascript - 数组:以这种方式组合它们

java - Java 7 中过滤和返回对象的优化方式

java - JNativeHook 你如何避免打印发生的一切?

java - 我试图将一个 servlet 调用到另一个 servlet,但无法调用 servlet

python - 为什么numpy的效率不成比例

algorithm - 需要在 Scala 中实现二进制堆结构的建议

C:动态大小结构的推荐样式

java - 为什么我的 Java 应用程序被杀死了?

arrays - 递归函数不会中断