题目:
实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?
解法:
一开始,不妨先问问面试官,上面的字符串是ASCII字符串还是Unicode字符串。这很重要,问这个问题表明你关注细节,并且对计算机科学有深刻了解。
为了简单起见,这里假定字符集为ASCII。若不是的话,则需扩大存储空间,不过其余逻辑没有分别。
假定字符集为ASCIl,对于这个问题,我们可以做一个简单的优化,若字符串的长度大于字母表中的字符个数,则直接返回false。毕竟,若字母表只有256个字符.字符串里就不可能有280个各不相同的字符。
第一种解法是构建一个布尔值的数组,索引值i对应的标记指示该字符串是否含有字母表第1个字符。若这个字符第二次出现,则立即返回false。
下面是这个算法的实现代码。
package 字符串问题;
public class case01_字符与数组问题 {
public static void main(String[] args) {
String s=new String();
s="asdfag";
System.out.println(new case01_字符与数组问题().different(s));
}
private static boolean different(String s) {
int n=s.length();
if(s.isEmpty()){
return true;
}
int[] flag=new int[128];//以空间换时间
//扫描字符串
for(int i=0;i<n;i++){
int c=(int)s.charAt(i);
if(flag[c]>0){
return false;
}else{
flag[c]++;
}
}
return true;
}
}