GoLang 字符串变位词

小立立 · · 1499 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

目标

写出一个函数 anagram(s, t) 去判断两个字符串是否是颠倒字母顺序构成的。

  • 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;
    }




有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:小立立

查看原文:GoLang 字符串变位词

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1499 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传