Слово-палиндром, насколько эффективно решена задача - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, вот готовлюсь к ЕГЭ, тренируюсь решать С4. Скажите пожалуйста, насколько эффективно решена эта задача: На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять, можно ли переставить эти буквы так, чтобы получился палиндром (палиндром читается одинаково слева направо и справа налево). Программа должна вывести ответ «Да» или «Нет», а в случае ответа «Да» – еще и сам полученный палиндром (первый в алфавитном порядке). Пример входной строки: GAANN Пример выходных данных: Да ANGNA
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication6
{
    class Program
    {
        static void Main()
        {
            List<char> list = new List<char>();
            list = Console.ReadLine().ToList();
            var symbols = list.Where(e=>e!='.').GroupBy(e => e).OrderBy(g => g.Key).Select(g => g); //Descending для большего по алфавиту(последним в алфавитном порядке)
            if(symbols.Count(g=>g.Count()%2!=0)>1||symbols.Count(g=>g.Count()%2==0)<1)
            {
                Console.WriteLine("No");
                return;
            }
            string str = string.Empty;
            foreach (var symbol in symbols)
            {
                if(symbol.Count()%2!=0) continue;
                str += symbol.Aggregate("", (current, a) => current + a);
            }
            string line = string.Empty;
            int i = 0;
            while(i<=str.Length-1)
            {
                line += str[i];
                i += 2;
            }
            string insered = symbols.First(g => g.Count()%2 != 0).Aggregate("", (current, a) => current + a);
            Console.WriteLine("Yes\n"+line+insered+new string(line.Reverse().ToArray()));
            Console.ReadKey();
        }
    }
}
Заранее благодарю

Решение задачи: «Слово-палиндром, насколько эффективно решена задача»

textual
Листинг программы
using System;
 
namespace ConsoleAppTesting
{
    class Test
    {
        public static void Main(string[] args)
        {
            var enteredstring = "ASDBBBFAAUAAAAFFGUHASDHFG.rxd";
 
            const int dictsize = 'Z' - 'A' + 1;
            var s = enteredstring.Substring(0, enteredstring.IndexOf('.'));
            var cnt = new int[dictsize];
            foreach (var ch in s) cnt[ch - 'A']++;
            int oddcnt = 0, oddidx = -1;
            for (var i = 0; i < dictsize; i++)
                if (cnt[i] % 2 == 1) { oddcnt++; oddidx = i; };
 
            if (oddcnt > 1) { Console.WriteLine("No"); }
            else
            {
                Console.WriteLine("Yes");
                for (var i = 0; i < dictsize; i++) outstring(cnt, oddidx, i);
                if (oddidx >= 0) Console.Write((char)('A' + oddidx));
                for (var i = dictsize - 1; i >= 0; i--) outstring(cnt, oddidx, i);
            }
            Console.ReadKey();
        }
 
        private static void outstring(int[] cnt, int oddidx, int i)
        {
            if (cnt[i] > 0)
                Console.Write(new string((char)('A' + i), cnt[i] / 2));
        }
    }
}

ИИ поможет Вам:


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

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы