2016-01-23 27 views
0
static boolean permutation(String s, String t){ 
    if(s.length() != t.length()) return false; 
    int [] letters = new int [128]; 
    char[] s_array = s.toCharArray(); 
    for (char c: s_array){ 
     letters[c]++; 
    } 
    for(int i = 0; i< t.length(); i++){ 
     int c = (int) t.charAt(i); 
     letters[c]--; 
     if (letters [c] < 0)return false; 
    } 
    return true; 
} 

所以這段代碼是來自Cracking the Coding Interview,我想知道字母[c] ++和字母[c]是什麼意思。陣列增量語法

這與字母[C++]是一回事嗎?

回答

0

letters數組用於計數ts多少每個字母在這兩個字符串一直重複

每個字符已經ascii-code所以在這個for-each循環,c轉換成其ASCII代碼,實際上它char施放到integer所以這將是一個indexascii-code是在這個語句中的每個字符

獨特letters[c]++;考慮char c = 'A'所以c我s 65根據ascii-table,在字母數組65th element將增加一次,所以直到現在我們有一個'A'在我們的s字符串中,並且當循環結束時,我們已經計算了字符串s中每個字母的重複。

for (char c: s_array){ 
    letters[c]++; 
} 

等循環是相似的,但它使用的字符串t字符,每個字符t從它的重複字符串s確定permutation of s and t

希望你明白我說的減小一次!

和這個問題!

這與字母[C++]是一回事嗎?

沒有他們different.consider char c ='A'這種說法,你說會增加character B因爲ascii code of B66重複。

0

它從字母數組中遞增和遞減值。 c是你正在增加的字母數組的索引;因此字母[c++]不起作用。

0

這與字母[C++]是一回事嗎?

甚至沒有一點點。 :-) letters[c++]在這些地方將是一個語法錯誤(因爲Java不允許任意表達式作爲語句),因爲它是letters[c]; c = c + 1;

letters[c]++是有效的:

letters[c] = letters[c] + 1; 

例如,它的增加的值爲letters[c]。它根本不會改變c

--以同樣的方式工作,只是減少。

1

所以這段代碼是來自Cracking the Coding Interview,我想知道字母[c] ++和字母[c]是什麼意思。

這與字母[C++]是一回事嗎?

letters[c]++相當於

letters[c] = letters[c] + 1; 

letters[c]--執行

letters[c] = letters[c] - 1; 

letters[c++]而等同於,

letters[c] = letters[c]; 
c = c + 1; 
0

在這種情況下處於相同的此:

letters[c] = letters[c] + 1; 

而且

letters[c] = letters[c] - 1; 

由於信件是整數的數組。 但是當你在一個值上使用++--運算符時(當你有一個字符串數組時)沒有意義。

+0

''[c] ++''和'字母[c] =字母[c] + 1;'是一樣的!因爲'字母[c]'是一個整數,我們可以使用'++或 - '整數 –

+0

在這種情況下是的,但一般情況下,當你有一個字符串數組不是 – Abdelhak

+0

現在你是對的:) –