我對這里的一些事情感到困惑。 alpha/--alpha 和陣列內部 [c - 'a']。我通過除錯運行它,我注意到一個 1 被存盤。但我不明白為什么會這樣以及 - 'a' 在做什么。
boolean test = true;
String r = "aa";
String m = "baab";
int[] alpha = new int[26];
for(char c: m.toCharArray())
alpha[c - 'a'];
for(char c: r.toCharArray()){
if(alpha[c - 'a'] != 0)
--alpha[c - 'a'];
else
test = false;
}
System.out.print(test);
uj5u.com熱心網友回復:
該代碼通過充分利用 achar可以轉換為整數并用于int[] alpha = new int[26];26 個字符長的陣列來對應字母表中的字母這一事實來計算字符數,并且需要最少的代碼來執行此操作。
簡而言之,只要在字串中找到相應的字符,以下代碼就會簡單地將 或添加到陣列中: 1m
for(char c: m.toCharArray())
alpha[c - 'a'];
只要在字串中找到相應的字符,第二個回圈就會簡單地從陣列中減去--或:-1r
for(char c: r.toCharArray())
if(alpha[c - 'a'] != 0)
--alpha[c - 'a'];
更詳細地說:
and--簡單地增加或減少相關變數,并將其放在變數之前只是 alpha[x]意味著它將執行操作,然后分配增加的值,而不是相反,如果它在之后alpha[x] ,則在此代碼示例中沒有區別盡管:
例如以下代碼:
alpha[0] = 0;
alpha[0]; //or alpha[0] ;
System.out.println("The value was: " alpha[0]);
我們得到這個結果:
The value was: 1
至于,例如[c - 'a']a 的值實際上是 97,我們可以通過 來看到,這很有幫助,因為這意味著我們可以在某些情況下直接使用 char 變數而不是整數來撰寫更少的代碼。所以它實際上只是,但是,如果我們在背景關系中查看它,我們可以看到它也是字串中的一個字符,所以對于第一個字符,我們得到:char'a'System.out.println((int)'a');[c - 97]cm
String m = "baab";
for(char c: m.toCharArray()){
alpha[c - 'a'];
在回圈的第c一次迭代中等于'b',如下所示:
alpha['b' - 'a'];
但是我們知道 char 的行為類似于整數,其中a=97 和b=98 如下所示:
alpha[98 - 97];
對于回圈中的第一個字符“b”,它實際上最終導致:
alpha[1];//98-97=1
如果我們現在擴展 ,它看起來像這樣:
alpha[1] = alpha[1] 1;
例如,如果字符是 az,它的作業方式與 where['z'-'a']相同[122-97],相當于 [25]:
alpha['z'-'a'] = alpha['z'-'a'] 1;
//which is the same as
alpha[122-97] = alpha[122-97] 1;
//which equates to
alpha[25] = alpha[25] 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477501.html
上一篇:如何使用Arraylist中的命令列同時洗掉兩個物件
下一篇:訪問多個檔案中嵌套字典中的值?
