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

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

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

Пример:

public bool getStatus(string myString)
{

}

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

Ответы [ 30 ]

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

Просто для удовольствия:

return myString.SequenceEqual(myString.Reverse());
22 голосов
/ 20 марта 2012
public static bool getStatus(string myString)
{
    string first = myString.Substring(0, myString.Length / 2);
    char[] arr   = myString.ToCharArray();

    Array.Reverse(arr);

    string temp   = new string(arr);
    string second = temp.Substring(0, temp.Length / 2);

    return first.Equals(second);
}
14 голосов
/ 20 марта 2012
int length = myString.Length;
for (int i = 0; i < length / 2; i++)
{
    if (myString[i] != myString[length - i - 1])
        return false;
}
return true;
12 голосов
/ 20 марта 2012

Использование LINQ и, конечно, далеко от лучшего решения

var original = "ankYkna";
var reversed = new string(original.Reverse().ToArray());
var palindrom = original == reversed;
5 голосов
/ 16 декабря 2012

Одна строка кода с использованием Linq

public static bool IsPalindrome(string str)  
{
    return str.SequenceEqual(str.Reverse());
}
4 голосов
/ 18 июля 2014
 public static bool IsPalindrome(string value)
        {
            int i = 0;
            int j = value.Length - 1;
            while (true)
            {
                if (i > j)
                {
                    return true;
                }
                char a = value[i];
                char b = value[j];
                if (char.ToLower(a) != char.ToLower(b))
                {
                    return false;
                }
                i++;
                j--;
            }
        }
2 голосов
/ 21 июля 2013

// Этот метод c # проверяет четную и нечетную строку длинного палиндрома

public static bool IsPalenDrome(string palendromeString)
        {
            bool isPalenDrome = false;

            try
            {
                int halfLength = palendromeString.Length / 2;

                string leftHalfString = palendromeString.Substring(0,halfLength);

                char[] reversedArray = palendromeString.ToCharArray();
                Array.Reverse(reversedArray);
                string reversedString = new string(reversedArray);

                string rightHalfStringReversed = reversedString.Substring(0, halfLength);

                isPalenDrome = leftHalfString == rightHalfStringReversed ? true : false;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return isPalenDrome;
        }
1 голос
/ 14 февраля 2016
public static  bool IsPalindrome(string word)
        {
            //first reverse the string
            string reversedString = new string(word.Reverse().ToArray());
            return string.Compare(word, reversedString) == 0 ? true : false;
        }
1 голос
/ 11 июля 2017
 private void CheckIfPalindrome(string str) 
        {
            //place string in array of chars
            char[] array = str.ToCharArray(); 
            int length = array.Length -1 ;
            Boolean palindrome =true;
            for (int i = 0; i <= length; i++)//go through the array
            {
                if (array[i] != array[length])//compare if the char in the same positions are the same eg "tattarrattat" will compare array[0]=t with array[11] =t if are not the same stop the for loop
                {
                    MessageBox.Show("not");
                    palindrome = false;
                    break;

                }
                else //if they are the same make length smaller by one and do the same 
                {                   
                  length--;
                }

            }
            if (palindrome) MessageBox.Show("Palindrome"); 

        }
1 голос
/ 27 августа 2016

Метод расширения строки, простой в использовании:

    public static bool IsPalindrome(this string str)
    {
        str = new Regex("[^a-zA-Z]").Replace(str, "").ToLower();
        return !str.Where((t, i) => t != str[str.Length - i - 1]).Any();
    }
...