[英]Questions:Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structure
解:
public boolean isUniqueChars2(String str) {
if (str.length() > 256) return false;
boolean[] char_set = new boolean[256];
for (int i = 0; i< str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) {
return false;
}
char_set[val] = true;
}
return true;
}
我有一些疑問:
這些代碼基於以下前提:給定的字符串是ASCII字符串,如果它是Unicode字符串怎么辦? ASCII字符串和Unicode字符串有什么區別?
int val = str.charAt(i)我搜索了ASCII表,
如果字符串是“ @ABCD”,將返回什么數字?(將使用三個“ Dec,Hx,Oct”中的哪個?)
從文檔 :
char:char數據類型是單個16位Unicode字符。 它的最小值為'\\ u0000'(或0),最大值為'\\ uffff'(或65,535(含))。
為了使您的解決方案也適用於Unicode字符,請更改以下行:
if (str.length() > 256) return false; boolean[] char_set = new boolean[256];
為此:
if (str.length() > Character.MAX_VALUE + 1) return false;
boolean[] char_set = new boolean[Character.MAX_VALUE + 1];
- int val = str.charAt(i)我搜索了ASCII表。 如果字符串是“ @ABCD”,將返回什么數字? (將使用三個“ Dec,Hx,Oct”中的哪一個?)
您可以只運行代碼並親自查看。 "@ABCD".charAt(0)
返回char
類型的@
。 根據ASCII表轉換為64的int
。
Dec,Hx,Oct只是同一事物的翻譯。 就像西班牙語中的“ book”將是“ libro”一樣,十六進制的63將是0x3f
。
- str.charAt(i)應該返回一個字符(例如A),為什么將數據類型聲明為int可以將字符直接轉換為相應的ASCII表編號?
我想這是語言本身定義char
方式,但是我找不到權威的參考。
str.charAt(i)應該返回一個字符(例如A),為什么將數據類型聲明為int可以將字符直接轉換為相應的ASCII表編號?
當您編寫int i = str.charAt(...)
,Java語言規范將其稱為“ int i = str.charAt(...)
元轉換” 。 您可以這樣做,因為int
和char
都是類似整數的數字類型,並且每個合法的char值也是合法的int值。
http://docs.oracle.com/javase/specs/jls/se5.0/html/conversions.html#25214
至於為什么是ASCII? 這是因為Unicode是經過精心設計的,目的是與US-ASCII字符集兼容。 對於ASCII中的每個字符,其Unicode編碼與其ASCII編碼具有相同的數值。
將使用三個“ Dec,Hx,Oct”中的哪一個?
Dec,Hx和Oct列中的數字只是用不同的位置值基數表示的相同數字。 以字母“ A”為例。 用十進制表示數字“ A”時,為“ 65”。 在基數16中表示的相同數字是“ 41”,在基數8中表示的是“ 101”。 該表提供了所有三個基本代碼,因為這三個基本代碼通常用於計算機程序以及計算機硬件和軟件的文檔中。
因為所有現代計算機都以2為底數,所以通常使用8和16為底數,並且在2和8或16底之間進行轉換非常容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.