题目描述
请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
测试样例:
"aeiou"
返回:True
"BarackObama"
返回:False
解法1:遍历字符串查找相同字符,这种做法简单,效率相对较低。
import java.util.*;
public class Different {
public boolean checkDifferent(String iniString) {
char ch;
for (int i=0; i<iniString.length(); i++){
ch = iniString.charAt(i);
for (int j=i+1; j<iniString.length(); j++){
if (ch == iniString.charAt(j)) {
return false;
}
}
}
return true;
}
}
解法2:使用map来存储已经碰到的字符,统计次数,大于1以后返回。
import java.util.*;
public class Different {
public boolean checkDifferent(String iniString) {
char ch;
Map<Character, Integer> chCount = new HashMap<>();
for (int i=0; i<iniString.length(); i++){
ch = iniString.charAt(i);
if (chCount.get(ch) == null) {
chCount.put(ch, 1);
} else {
return false;
}
}
return true;
}
}