1、确定一个字符串的所有字符是否全都不同,假定字符集为ASCII。
思考:首先确定字符串长度是否大于256,再创建一个大小为256的布尔型数组用来记录字符是否出现。
public boolean isUniqueChars(String str){
if(str.length()>256) return false;
boolean[] char = new boolean[256];
for(int i=0;i<str.length();i++){
int val=str.charAt(i);
if(char[val]){
return false;
}
char[val]=true;
}
return true;
}
时间复杂度为O(n),n为字符串长度。空间复杂度为O(1)。
2、给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
思考:
方法一:对两组字符串进行排序,如果顺序相同,则互为变位词。
public String sort(String s){
char[] content = s.toCharArray();
java.util.Arrays.sort(content);
return new String(content);
}
public boolean permutation(String s, String t){
if(s.length()!=t.length()){
return false;
}
return sort(s).equals(sort(t));
}
方法二:检查两个字符串的各个字符数是否相同。
public boolean permutation(String s, String t){
if(s.length()!=t.length()){
return false;
}
int[] letters = new int[256];
char[] counts = s.toCharArray();
for (char c : counts) {
letters[c]++;
}
for (int i = 0; i < t.length(); i++) {
int c = t.charAt(i);
if(--letters[c]<0){
return false;
}
}
return true;
}