codewars изограммы

Рейтинг: -1Ответов: 1Опубликовано: 04.03.2023

Решал задачу с codewars и забросил так как не шла, а требуется выяснить является ли строка изограммой.Под изограммой будем понимать строку символы которой не повторяются. Регистром символов пренебречь.

Идея:проходим по строке и кидаем каждый символ в словарь, затем топаем по словарю и если есть хоть один символ что повторяется больше чем раз, то возвращаем false. Или же пробовать через set если символ уже есть такой, то возвращаем false

Проблема в том что я не знаю как сделать регистронезависимым метод. Написание кода застопорилось на момент прохода по символам строки, так что показывать особо нечего.

Ответы

▲ 1Принят

Просто приводите все символы к одному регистру (верхнему или нижнему). Причем тут даже словарь не обязателен, HashSet достаточно:

using System;
using System.Collections.Generic;

bool IsIsogram(string s)
{
    var chars = new HashSet<char>();
    foreach (var c in s.ToLowerInvariant())
    {
        if (!chars.Add(c))
        {
            return false;
        }    
    }
    return true;
}

Console.WriteLine(IsIsogram("abc")); // True
Console.WriteLine(IsIsogram("abca")); // False
Console.WriteLine(IsIsogram("abcA")); // False
Console.WriteLine(IsIsogram("съешь же ещё этих мягких французских булок, да выпей чаю")); // False