【leetcode初级算法-字符串】有效的字母异位词

题目:有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true

示例 2:
输入: s = “rat”, t = “car”
输出: false

提示:
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解法一:计算两个字符串中字符的差值
先统计字符串s中每个字符的数量
减去t中每个字符对应的数量
如果最后结果都是0,说明t是s的字母异位词。
/**
hashmap表
*/
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
hashmap := make(map[rune]int)

for _, i := range s {
   hashmap[i] += 1
}

for _, i := range t {
   if hashmap[i] -= 1; hashmap[i] < 0 {
      return false
   }
}
return true

}
s.charAt(i)-‘a’ 遍历s将字符串存到哈希表中,重复的加一
遍历t、将哈希表减一,如果哈希表没有全为0,证明有不相同的字母
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
sm := [26]int{}

for _, i := range s {
sm[i-‘a’] += 1
}

for _, i := range t {
if sm[i-‘a’] -= 1; sm[i-‘a’] < 0 {
return false
}
}

return true
}
图片
Java实现
import java.util.HashMap;
import java.util.Map;

public class IsAnagram {
public static boolean isAnagram(String s, String t) {
if (s.length()!= t.length()) {
return false;
}
Map hashmap = new HashMap<>();
for (char c : s.toCharArray()) {
hashmap.put(c, hashmap.getOrDefault(c, 0) + 1);
}
for (char c : t.toCharArray()) {
if (!hashmap.containsKey(c) || hashmap.get(c) <= 0) {
return false;
}
hashmap.put(c, hashmap.get(c) – 1);
}
return true;
}
}
php实现
function isAnagram($s, $t) {
if (strlen($s)!== strlen($t)) {
return false;
}
$hashmap = [];
for ($i = 0; $i < strlen($s); $i++) {
$char = $s[$i];
if (!isset($hashmap[$char])) {
$hashmap[$char] = 0;
}
$hashmap[$char]++;
}
for ($i = 0; $i < strlen($t); $i++) {
$char = $t[$i];
if (!isset($hashmap[$char]) || $hashmap[$char] <= 0) {
return false;
}
$hashmap[$char]–;
}
return true;
}
C++实现

include

include

include

bool isAnagram(std::string s, std::string t) {
if (s.length()!= t.length()) {
return false;
}
std::unordered_map hashmap;
for (char c : s) {
hashmap[c]++;
}
for (char c : t) {
if (hashmap.find(c) == hashmap.end() || hashmap[c] <= 0) {
return false;
}
hashmap[c]–;
}
return true;
}
解法二:排序
public boolean isAnagram(String s, String t) {
char[] sChar = s.toCharArray();
char[] tChar = t.toCharArray();
//对两个字符串中的字符进行排序
Arrays.sort(sChar);
Arrays.sort(tChar);
return Arrays.equals(sChar, tChar);
}
package main

import (
“fmt”
“sort”
“strings”
)

func isAnagram(s, t string) bool {
sRunes := []rune(s)
tRunes := []rune(t)
sort.Slice(sRunes, func(i, j int) bool {
return sRunes[i] < sRunes[j]
})
sort.Slice(tRunes, func(i, j int) bool {
return tRunes[i] < tRunes[j]
})
return string(sRunes) == string(tRunes)
}
作者:LeetCode 链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xn96us/

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/422931.html

(0)
联系我们
联系我们
分享本页
返回顶部