【问题标题】:What does a[c - 'a' ]++ mean in Java? [duplicate]Java 中的 a[c - 'a' ]++ 是什么意思? [复制]
【发布时间】:2021-03-31 23:19:03
【问题描述】:

目标是计算两个字符串中的常见字符并返回一个整数。我什么都懂,除了

a[c - 'a' ]++;

我尝试过搜索一些课程的文档,搜索引文中的内容,并搜索一些可能的描述以了解正在发生的事情,但我什至无法找到调用 a[c - 'a' ]++; 的内容,更不用说它实际上在做什么.对我来说,它似乎在计算特定字符的出现次数,但我不确定。

这是代码

int commonCharacterCount(String s1, String s2) {
int[] a = new int[26], 
    b = new int[26];
for (char c: s1.toCharArray())
    a[c - 'a']++;
for (char c: s2.toCharArray())
    b[c - 'a']++;
int s = 0;
for (int i = 0; i < 26; ++i) 
    s +=Math.min(a[i],b[i]);
return s;

【问题讨论】:

    标签: java string foreach


    【解决方案1】:

    'a'char 类型,它来自 C 传统,可以解释为 a number type。也就是说,您可以像使用 intlong 一样使用它进行算术运算。

    char 的值传统上由ASCII table 给出,其中'a' 恰好与97 相同。

    在你的代码中,c 也是一个char,如果你假设s1s2 只包含小写字母,你知道c[97,122] 范围内的某个位置.从中减去'a'(即97),然后您可以使用更方便的范围[0,25]

    我说“更方便”是因为这里使用c - 'a' 来索引数组a,并且如您所知,数组索引从0 开始。

    【讨论】:

    • char 的值由 UTF-16 给出,其中 ASCII 是一个子集。
    • 正确,但请注意,我写的“传统”更旨在指出该约定的起源。
    • @Thomas 谢谢!我知道 char 有数值,但我不明白如何从当前索引中减去 'a' 来确定要增加数组中的哪个元素,我现在明白它正在简化 char 的数值。
    • @TylerRoberson - 那是因为您实际上并没有从当前索引中减去:您是从当前 字符 中减去。也就是说,c 不是0, 1, 2, ...,但它是s1[0], s1[1], s1[2],...(或s2 相同)好吧,我在这里混合了字符串和数组表示法,但你明白我的意思。
    【解决方案2】:

    在某些情况下,Java 中的字符可以作为小整数进行操作。表达式c - 'a' 的意思是“c 的整数表示”减去“'a' 的整数表示”。换句话说,你得到了c相对于'a'在ASCII字符集中的偏移量,即c在小写字母中的索引。

    因此a[c - 'a']++ 表示使用索引i 递增a 中的计数器,其中ic 在字母表中的位置。

    【讨论】:

    • 我比我自己更喜欢这个解释。
    猜你喜欢
    • 2021-09-18
    • 2014-03-26
    • 2014-12-21
    • 1970-01-01
    • 2016-12-14
    • 2011-04-16
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多