Проверьте, является ли строка палиндромом - PullRequest
14 голосов
/ 20 марта 2012

У меня есть строка в качестве ввода и я должен разбить строку на две подстроки.Если левая подстрока равна правой подстроке, выполните некоторую логику.

Как я могу это сделать?

Пример:

public bool getStatus(string myString)
{

}

Пример: myString = "ankYkna", так что еслимы разбиваем его на две подстроки: left-part = "ank", right-part = "ank" (после обращения).

Ответы [ 30 ]

1 голос
/ 11 июня 2014

Этот способ очень лаконичен и очень быстро обрабатывается.

Func<string, bool> IsPalindrome = s => s.Reverse().Equals(s);
0 голосов
/ 04 ноября 2017
public static bool palindrome(string t)
    {
        int i = t.Length;
        for (int j = 0; j < i / 2; j++)
        {
            if (t[j] == t[i - j-1])
            {
                continue;
            }
            else
            {
                return false;
                break;
            }
        }
        return true;
    }
0 голосов
/ 13 сентября 2017
string test = "Malayalam";
            char[] palindrome = test.ToCharArray();
            char[] reversestring = new char[palindrome.Count()];
            for (int i = palindrome.Count() - 1; i >= 0; i--)
            {
                reversestring[palindrome.Count() - 1 - i] = palindrome[i];

            }

            string materializedString = new string(reversestring);

            if (materializedString.ToLower() == test.ToLower())
            {
                Console.Write("Palindrome!");
            }
            else
            {
                Console.Write("Not a Palindrome!");
            }

            Console.Read();
0 голосов
/ 18 января 2017
static void Main(string[] args)
{
    string str, rev="";

    Console.Write("Enter string");

    str = Console.ReadLine();

    for (int i = str.Length - 1; i >= 0; i--)
    {
        rev = rev + str[i];
    }

    if (rev == str)
        Console.Write("Entered string is pallindrome");
    else
        Console.Write("Entered string is not pallindrome");

    Console.ReadKey();
}
0 голосов
/ 20 октября 2016

Из всех решений ниже также можно попробовать:

public static bool IsPalindrome(string s)
{
    return s == new string(s.Reverse().ToArray());
}
0 голосов
/ 20 октября 2016

Вот абсолютно простой способ сделать это,

  1. Получите слово в качестве ввода в метод.
  2. Назначить временную переменную исходному значению.
  3. Переберите начальное слово и добавьте последний символ к построенному вами обращению, пока в начальном слове не останется больше символов.
  4. Теперь используйте созданную вами запасную часть для хранения исходного значения для сравнения с созданной копией.

Это хороший способ, так как вам не нужно разыгрывать инты и двойники. Вы можете просто передать их методу в их строковом представлении с помощью метода ToString ().

public static bool IsPalindrome(string word)
    {
        string spare = word;
        string reversal = null;
        while (word.Length > 0)
        {
            reversal = string.Concat(reversal, word.LastOrDefault());
            word = word.Remove(word.Length - 1);
        }
        return spare.Equals(reversal);
    }

Итак, из вашего основного метода, Для строк четной и нечетной длины вы просто передаете всю строку в метод.

0 голосов
/ 03 марта 2016

Поскольку палиндром также включает числа, слова, предложения и любые их комбинации, и должен игнорировать знаки препинания и регистр ( См. Статью Википедии ) Я предлагаю это решение:

public class Palindrome
{
    static IList<int> Allowed = new List<int> {
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'h',
        'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
        'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
        '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0'
    };
    private static int[] GetJustAllowed(string text)
    {
        List<int> characters = new List<int>();
        foreach (var c in text)
             characters.Add(c | 0x20); 

        return characters.Where(c => Allowed.Contains(c)).ToArray();
    }
    public static bool IsPalindrome(string text)
    {
        if(text == null || text.Length == 1)
             return true;

        int[] chars = GetJustAllowed(text);
        var length = chars.Length;

        while (length > 0)
            if (chars[chars.Length - length] != chars[--length])
                return false;

        return true;
    }
    public static bool IsPalindrome(int number)
    {
        return IsPalindrome(number.ToString());
    }
    public static bool IsPalindrome(double number)
    {
        return IsPalindrome(number.ToString());
    }
    public static bool IsPalindrome(decimal number)
    {
        return IsPalindrome(number.ToString());
    }

}
0 голосов
/ 20 марта 2012

Это нетривиально, для этого нет встроенного метода, вам придется написать свой собственный.Вам нужно будет подумать, какие правила вы хотели бы проверить, например, если вы неявно заявили, что приняли обращение одной строки.Кроме того, вы пропустили средний символ, это только если нечетная длина?

Таким образом, у вас будет что-то вроде:

if(myString.length % 2 = 0)
{
     //even
     string a = myString.substring(0, myString.length / 2);
     string b = myString.substring(myString.length / 2 + 1, myString.lenght/2);

     if(a == b)
           return true;

     //Rule 1: reverse
     if(a == b.reverse()) //can't remember if this is a method, if not you'll have to write that too
           return true;

и т. Д., И все, что вы хотите для нечетных строк

0 голосов
/ 30 января 2019
    public  bool MojTestPalindrome (string word)
    {
        bool yes = false;

        char[]test1 = word.ToArray();
        char[] test2 = test1.Reverse().ToArray();
        for (int i=0; i< test2.Length; i++)
        {

            if (test1[i] != test2[test2.Length - 1 - i])
            {

                yes = false;
                break;

            }
            else {   
                yes = true;


            }
        }
        if (yes == true)
        {
            return true;
        }
        else

            return false;                
    }
0 голосов
/ 17 июля 2018

Это короткий и эффективный способ проверки палиндрома.

bool checkPalindrome(string inputString) {

    int length = inputString.Length;
    for(int i = 0; i < length/2; i++){
        if(inputString[i] != inputString[length-1-i]){
            return false;
        }
    }

    return true;

}
...