План курса / Все задачи / Алгоритмы и структуры данных
Слово - анаграмма
легко
# решено
Даны две строки s и t, нужно вернуть true, если t является анаграммой s, и false в противном случае.
Анаграмма — это слово или фраза, образованная путем перестановки букв другого слова или фразы, с использованием всех исходных букв ровно один раз.
Пример 1:
Ввод: s="hello", t="lolhe"
Вывод: true
Пример 2:
Ввод: s="car", t="cat"
Вывод: false
Пример 3:
Ввод: s="abc", t="abcc"
Вывод: false
Ограничения:
Строки s и t содержат только английские буквы в нижнем регистре.
len(s), len(t) >= 1
public class Solution
{
public static bool IsValidAnagram(string s, string t)
{
if (s.Length != t.Length)
{
return false;
}
// Счётчик вхождений каждой буквы
int[] count = new int[26];
for (int i = 0; i < s.Length; i++)
{
count[s[i] - 'a']++;
count[t[i] - 'a']--;
}
foreach (var c in count)
{
if (c != 0)
{
return false;
}
}
return true;
}
}
#include <string>
#include <vector>
using namespace std;
bool isValidAnagram(const string& s, const string& t) {
if (s.size() != t.size()) {
return false;
}
// счётчик вхождений каждой буквы
vector<int> count(26, 0);
for (int i = 0; i < s.size(); i++) {
count[s[i] - 'a']++;
count[t[i] - 'a']--;
}
return count == vector<int>(26, 0);
}
package main
func isValidAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
// счётчик вхождений каждой буквы
count := make([]int, 26)
for i := range len(s) {
count[s[i]-'a']++
count[t[i]-'a']--
}
for _, c := range count {
if c != 0 {
return false
}
}
return true
}
import java.util.*;
public class Solution {
public boolean isValidAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
// счётчик вхождений каждой буквы
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
count[s.charAt(i) - 'a']++;
count[t.charAt(i) - 'a']--;
}
for (int c : count) {
if (c != 0) {
return false;
}
}
return true;
}
}
from typing import *
def is_valid_anagram(s: str, t: str) -> bool:
if len(s) != len(t):
return False
# счётчик вхождений каждой буквы
count = [0] * 26
for i in range(len(s)):
count[ord(s[i]) - ord('a')] += 1
count[ord(t[i]) - ord('a')] -= 1
return all(c == 0 for c in count)
/**
* @param {string} s
* @param {string} t
* @returns {boolean}
*/
export function isValidAnagram(s, t) {
if (s.length !== t.length) {
return false;
}
// счётчик вхождений каждой буквы
const aCode = 'a'.charCodeAt(0);
const count = new Array(26).fill(0);
for (let i = 0; i < s.length; i++) {
count[s.charCodeAt(i) - aCode]++;
count[t.charCodeAt(i) - aCode]--;
}
return count.every(c => c === 0);
}