第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計數(shù)數(shù)組的行為

計數(shù)數(shù)組的行為

回首憶惘然 2023-04-13 15:05:47
count 是 char 數(shù)組,它只存儲字符。count[str.charAt(i)]++;上面一行到底發(fā)生了什么?count[str.charAt(i)] == 1char array 的整數(shù)如何與 char 進行比較?粘貼下面的代碼以找出字符串中的第一個非重復字符。它絕對有效。誰能回答我上面提到的兩個問題?class GFG {  static final int NO_OF_CHARS = 256;  static char count[] = new char[NO_OF_CHARS]; /* calculate count of characters     in the passed string */ static void getCharCountArray(String str)   {      for (int i = 0; i < str.length();  i++)      {  //System.out.println(count[str.charAt(i)]+"   Before");          count[str.charAt(i)]++;         // System.out.println(count[str.charAt(i)]+"   After");     } } /* The method returns index of first non-repeating    character in a string. If all characters are repeating     then returns -1 */static int firstNonRepeating(String str) {     getCharCountArray(str);     int index = -1, i;     for (i = 0; i < str.length();  i++)     {         if (count[str.charAt(i)] == 1)         {             index = i;             break;         }        }     return index; } // Driver method public static void main (String[] args) {     String str = "geeksforgeeks";     int index =  firstNonRepeating(str);     System.out.println(index == -1 ? "Either all characters are repeating or string " +                "is empty" : "First non-repeating character is " +  str.charAt(index)); } }
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

因此,下面的代碼將迭代 a 中的每個字符String,并根據(jù)字符的數(shù)值,由cameron1024 answer's解釋,增加一個計數(shù)器。


for (int i = 0; i < str.length();  i++) 

{     //System.out.println(count[str.charAt(i)]+"   Before");

      count[str.charAt(i)]++; 

      // System.out.println(count[str.charAt(i)]+"   After");

}

好吧,理論上是因為您需要更新數(shù)組以正確遞增:


count[str.charAt(i)] = count[str.charAt(i)]++; 


//Same as

char tmp = count[str.charAt(i)];

count[str.charAt(i)] + 1;

count[str.charAt(i)] = tmp; 

但也要使用正確的增量運算符,因為它會返回原始值而不是結果


count[str.charAt(i)] = ++count[str.charAt(i)]; 


//Same as

count[str.charAt(i)] = count[str.charAt(i)] + 1;

當然,你可以簡化


for (int i = 0; i < str.length();  i++) 

{

    char c = str.charAt(i);

    count[c] = ++count[c]; 

}

甚至更好


for( char c : str.toCharArray())

{

    count[c] = ++count[c]; 

}


查看完整回答
反對 回復 2023-04-13
?
米脂

TA貢獻1836條經驗 獲得超3個贊

根據(jù) Oracle 的文檔:

char 數(shù)據(jù)類型是單個 16 位 Unicode 字符。它的最小值為 > >'\u0000'(或 0),最大值為 '\uffff'(或 65,535)。

為此,您可以將其視為 16 位無符號(即正)整數(shù)。因此,代碼char c = 1;等價于char c = (int) 1;,由于Java在類型之間的自動轉換。這類似于 how?long l = 1;,盡管1它是整數(shù)原語,因為 Java 語言理解您可能想要一個long而不是int.

因此,count[i] == 1它的行為就像您將 is 定義為一個int[],并檢查該索引處字節(jié)的數(shù)值以查看它們是否相等1;

相反,如果您嘗試檢查該索引是否包含字符1,您可以嘗試count[i] == '1';(注意單引號,用于字符文字而不是字符串文字)。


查看完整回答
反對 回復 2023-04-13
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

兩字節(jié)char可以擴展為四字節(jié)int。(char)('a' + 1) == 'b''a' == 97

  1. char(一個 2 字節(jié)的 UTF16 值)已用作索引 ( count[str.charAt(i)]),將其擴展為 65_535 (0xFFFF) 的 0 之間的一個整數(shù)。

  2. char也被用于char[] count從 0 到 65_535 的計數(shù) ( )。

所以有兩個限制:

  1. 特殊字符很容易超過數(shù)組長度:0x20AC、0x2018 和0x2019。

  2. 如果str包含超過 65_535 個相同字符,則計數(shù)溢出。

該算法將更清晰:

Map<Character, Integer> count = str.chars()
    .mapToObj(char.class::cast)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

看起來好像在 C/C++ 中char被假定byte為歷史上的 a 。然而,java 旨在處理字符串中的完整 Unicode,并且char是 UTF-16BE 格式的兩個字節(jié)。所以java可以同時持有多個腳本。

計數(shù)[str.charAt(i)]++;

int j = (int')str.charAt(i);
count[j] = ((int)count[j]) + 1;

計數(shù)[str.charAt(i)] == 1

char ch = count[j];
(int)ch == 1


查看完整回答
反對 回復 2023-04-13
  • 3 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號