我正在审查一个问题,即尝试确定字符串中的所有字符是否都是唯一的。这是算法
public static boolean unique(String s) {
if(s.length() > 128) {
return false;
}
boolean[] char_set = new boolean[256];
for(int i = 0; i < s.length(); i++) {
int val = s.charAt(i);
System.out.println(i + ": " + val);
if(char_set[val]) { // already found this char in string
return false;
}
char_set[val] = true;
}
return true;
}
特别是,我的歧义来源是:
int val = s.charAt(i);
根据我的理解,ASCII字符有128个唯一字符。 s.charAt(i)
只是返回ASCII字符串中字符的索引吗?
使用12310
我为val
获得了以下值:
0: 32
1: 49
2: 50
3: 51
4: 49
如果值32
,49
等来自哪里,如果它不是ASCII字符串的char的索引,我完全感到困惑。
答案 0 :(得分:1)
根据我的理解,ASCII字符有128个唯一字符。是 s.charAt(i)只返回字符内的索引 ASCII字符串?
nope,String#charAt
返回指定索引处的char值。 Find more in documentation
32,49,...是char ascii值。
答案 1 :(得分:0)
您看到的是角色的ASCII值。在内存中,原始char和原始int之间没有区别。我对您的代码进行了一些小改动,使其更容易理解,并且可以进行演示测试。&#xA; @测试&#XA; public void testGetUnique(){&#xA;独特的(“12301”);&#xA;唯一的( “0123456789”);&#XA;唯一的( “abcdefghijklmnop”);&#XA;唯一的( “ABCDEFGHIJKLMNOP”);&#XA; }
&#xA;&#xA; public static boolean unique(String s){&#xA;的System.out.println(S);&#XA; if(s.length()&gt; 128){&#xA;返回false;&#xA; }&#XA; boolean [] char_set = new boolean [256];&#xA; for(int i = 0; i&lt; s.length(); i ++){&#xA; char c = s.charAt(i);&#xA; int val = c;&#xA; System.out.println(“i:”+ i +“c:”+ c +“”+ val);&#xA; }&#XA; return true;&#xA;}&#xA;
&#xA;&#xA; 输出为&#xA; 1230
&#xA;&#xA; 1&#xA; i:0 c:32&#xA; i:1 c:1 49&#xA; i:2 c:2 50&# xA; i:3 c:3 51&#xA; i:4 c:0 48&#xA; i:5 c:1 49&#xA; 0123456789&#xA; i:0 c:0 48&#xA; i:1 c :1 49&#xA; i:2 c:2 50&#xA; i:3 c:3 51&#xA; i:4 c:4 52&#xA; i:5 c:5 53&#xA; i:6 c :6 54&#xA; i:7 c:7 55&#xA; i:8 c:8 56&#xA; i:9 c:9 57&#xA; abcdefghijklmnop&#xA; i:0 c:a 97&#xA; i:1 c:b 98&#xA; i:2 c:c 99&#xA; i:3 c:d 100&#xA; i:4 c:e 101&#xA; i:5 c:f 102&#xA; i:6 c:g 103&#xA; i:7 c:h 104&#xA; i:8 c:i 105&#xA; i:9 c:j 106&#xA; i:10 c:k 107&#xA; i:11 c:l 108&#xA; i:12 c:m 109&#xA; i:13 c:n 110&#xA; i:14 c:o 111&#xA; i:15 c:p 112&#xA; ABCDEFGHIJKLMNOP&#xA; i:0 c:A 65&#xA; i:1 c:B 66&#xA; i:2 c:C 67&#xA; i:3 c:D 68&#xA; i:4 c:E 69&#xA; i:5 c:F 70&#xA; i:6 c:G 71&#xA; i:7 c:H 72&#xA; i:8 c:I 73&#xA; i:9 c:J 74&#xA; i:10 c:K 75&#xA; i:11 c:L 76&#xA; i:12 c:M 77&#xA; i:13 c:N 78&#xA; i:14 c:O 79&#xA; i:15 c:P 80&#xA;
&#xA;&#xA; 因此空间为32,0为48,它增加1到57。 'A'是65,然后你在每个字母后加一个。 'a'是97,同样的交易。
&#xA;