java变位词_GoLang 字符串变位词

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,大家一起学习交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值