在Go(Golang)中检查两个给定的字符串是否是变位词的方法

219 阅读1分钟

概述

变位词是指通过重新排列不同的单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。例如,anagram这个词本身可以被重新排列成nagarambinary这个词也可以被排列成brainy,而adobe这个词可以被排列成abode

比如说

Input: abc, bac
Ouput: true

Input: abc, cb
Ouput: false

以下是如何做到这一点的想法。创建一个字符串到int的映射。现在

  • 遍历第一个字符串,增加映射中每个字符的数量

  • 遍历第二个字符串,减少地图中每个字符的计数。

  • 再次遍历第一个字符串,如果地图中任何一个字符的计数不为零,则返回false。

  • 最后返回true。

程序

以下是相同的程序。

package main

import "fmt"

func isAnagram(s string, t string) bool {

	lenS := len(s)
	lenT := len(t)

	if lenS != lenT {
		return false
	}

	anagramMap := make(map[string]int)

	for i := 0; i < lenS; i++ {
		anagramMap[string(s[i])]++
	}

	for i := 0; i < lenT; i++ {
		anagramMap[string(t[i])]--
	}

	for i := 0; i < lenS; i++ {
		if anagramMap[string(s[i])] != 0 {
			return false
		}
	}

	return true
}

func main() {
	output := isAnagram("abc", "bac")
	fmt.Println(output)

	output = isAnagram("abc", "bc")
	fmt.Println(output)
}

输出

true
false