GoLang 实现
func solution(s , t string)bool{

if s == t {
    return true
}
length := len(s)
if  length != len(t) {
    return false
}
//' ' 32  --> ~ 126
const MAX_ASCII int= 94
const SPACE_INDEX rune = 32

numbers := [MAX_ASCII]int{}
sRune := []rune(s)
tRune :=[]rune(t)

for i := 0 ; i < length ; i++ {
    index := tRune[i] - SPACE_INDEX
    numbers[index]++

    index = sRune[i] - SPACE_INDEX
    numbers[index]--
}
for i := 0 ; i < MAX_ASCII / 2 ; i++{
    mergeSize :=  numbers[i]
    if mergeSize != 0 || mergeSize != numbers[MAX_ASCII - 1 - i]{
        return false
    }
}
return true

}

其中关键点1 :

定义保存最后判断两个字符串是否相同的 长度的取值:

根据ASCII 表可以知道:
第一个单字符 ' ' 的10 进制值位32 , 最后一个单字符 '~' 10进制值位 126 , 得到之间的差值为 94 ,
这里预测每个字符都被使用到了, 所以长度直接定义为 94了.

Java 实现 和上面类似:
public boolean anagram(String s, String t) {

    if (s == null || t == null || s.length() ==0 || s.length() != t.length()){
        return false;
    }
    if (s.equals(t))return true;

    final int MAX_ASCII = 94;
    final char SPACE_INDEX = ' ';

    int[] numbers = new int[MAX_ASCII];
    int length = s.length();

    char[] sCharArray = s.toCharArray();
    char[] tCharArray = t.toCharArray();

    for(int i = 0 ; i< length ; i++){
        int index = sCharArray[i] - SPACE_INDEX;
        numbers[index]++;

        index = tCharArray[i] - SPACE_INDEX;
        numbers[index]--;
    }

    for (int i =0 ; i < MAX_ASCII / 2 ; i++ ) {
        int mergeSize = numbers[i];
        if ( mergeSize != 0 || mergeSize != numbers[MAX_ASCII - 1 - i]){
            return false;
        }
    }
    return true;
}

欢迎加入学习交流群569772982,大家一起学习交流。


java部落
90 声望13 粉丝