web-dev-qa-db-fra.com

Vérifier si une chaîne est un palindrome

J'ai une chaîne en entrée et je dois la séparer en deux sous-chaînes. Si la sous-chaîne de gauche est égale à la sous-chaîne de droite, faites de la logique.

Comment puis-je faire ceci?

Échantillon:

public bool getStatus(string myString)
{

}

Exemple: myString = "ankYkna", donc si nous le divisons en deux sous-chaînes, ce serait: left-part = "ank", right-part = "ank" (après inversion).

14
ankur
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);
}
21
ionden

Juste pour le fun:

return myString.SequenceEqual(myString.Reverse());
61
Balazs Tihanyi
int length = myString.Length;
for (int i = 0; i < length / 2; i++)
{
    if (myString[i] != myString[length - i - 1])
        return false;
}
return true;
13
Balazs Tihanyi

Utiliser LINQ et bien sûr loin de la meilleure solution

var original = "ankYkna";
var reversed = new string(original.Reverse().ToArray());
var palindrom = original == reversed;
12
Adrian Iftode
 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--;
            }
        }
4
GANI

Une seule ligne de code utilisant Linq

public static bool IsPalindrome(string str)  
{
    return str.SequenceEqual(str.Reverse());
}
3
Ernesto Cejas

// Cette méthode c # vérifie la longueur d'une chaîne palindrome lengh/impaire

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;
        }
2
Tabish Habib

Méthode d'extension de chaîne, facile à utiliser:

    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();
    }
1
Dr3
 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
pilot13

Cette manière est à la fois concise en apparence et en processus très rapidement.

Func<string, bool> IsPalindrome = s => s.Reverse().Equals(s);
1
Lshaka
public bool Solution(string content)
    {
        int length = content.Length;

        int half = length/2;

        int isOddLength = length%2;

        // Counter for checking the string from the middle 
        int j = (isOddLength==0) ? half:half+1;

        for(int i=half-1;i>=0;i--)
        {                
            if(content[i] != content[j])
            {
               return false;
            }
            j++;

        }
        return true;
    }
0
Tanvir Anowar
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
abhay chavan

C'est un moyen court et efficace de vérifier le palindrome.

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;

}
0
Amrit Subedi

Voici un moyen absolument simple de le faire, 

  1. Recevez le mot comme entrée dans une méthode.
  2. Attribuez une variable temporaire à la valeur d'origine.
  3. Parcourez le mot initial et ajoutez le dernier caractère à l'inversion que vous construisez jusqu'à ce que le mot initial ne comporte plus aucun caractère.
  4. Maintenant, utilisez le disque de rechange que vous avez créé pour conserver la valeur d'origine à comparer à la copie construite.

C’est une bonne façon de ne pas devoir lancer d’inters et de doubles. Vous pouvez simplement les transmettre à la méthode dans leur représentation de chaîne à l'aide de la méthode 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);
    }

Donc, à partir de votre méthode principale, Pour les chaînes de longueur paire et impaire, passez simplement la chaîne entière à la méthode.

0
Vishav Premlall

utiliser cette méthode à partir de dotnetperls

  using System;

    class Program
    {
        /// <summary>
        /// Determines whether the string is a palindrome.
        /// </summary>
        public static bool IsPalindrome(string value)
        {
            int min = 0;
            int max = value.Length - 1;
            while (true)
            {
                if (min > max)
                {
                    return true;
                }
                char a = value[min];
                char b = value[max];

                // Scan forward for a while invalid.
                while (!char.IsLetterOrDigit(a))
                {
                    min++;
                    if (min > max)
                    {
                        return true;
                    }
                    a = value[min];
                }

                // Scan backward for b while invalid.
                while (!char.IsLetterOrDigit(b))
                {
                    max--;
                    if (min > max)
                    {
                        return true;
                    }
                    b = value[max];
                }

                if (char.ToLower(a) != char.ToLower(b))
                {
                    return false;
                }
                min++;
                max--;
            }
        }

        static void Main()
        {
            string[] array =
            {
                "A man, a plan, a canal: Panama.",
                "A Toyota. Race fast, safe car. A Toyota.",
                "Cigar? Toss it in a can. It is so tragic.",
                "Dammit, I'm mad!",
                "Delia saw I was ailed.",
                "Desserts, I stressed!",
                "Draw, O coward!",
                "Lepers repel.",
                "Live not on evil.",
                "Lonely Tylenol.",
                "Murder for a jar of red rum.",
                "Never odd or even.",
                "No lemon, no melon.",
                "Senile felines.",
                "So many dynamos!",
                "Step on no pets.",
                "Was it a car or a cat I saw?",

                "Dot Net Perls is not a palindrome.",
                "Why are you reading this?",
                "This article is not useful.",
                "...",
                "...Test"
            };

            foreach (string value in array)
            {
                Console.WriteLine("{0} = {1}", value, IsPalindrome(value));
            }
        }
    }
0
FAREH
protected bool CheckIfPalindrome(string text)
{
    if (text != null)
    {
        string strToUpper = Text.ToUpper();
        char[] toReverse = strToUpper.ToCharArray();
        Array.Reverse(toReverse );
        String strReverse = new String(toReverse);
        if (strToUpper == toReverse)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

Utilisez cette façon la plus sipmlest.

0
Omer K
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
Artyom Arshakyan
public bool IsPalindroom(string input)
{
    input = input.ToLower();
    var loops = input.Length / 2;
    var higherBoundIdx = input.Length - 1;
    for (var lowerBoundIdx = 0; lowerBoundIdx < loops; lowerBoundIdx++, higherBoundIdx--)
    {
        if (input[lowerBoundIdx] != input[higherBoundIdx])
        return false;
    }
    return true;
}
0
M. Mimpen

Parmi toutes les solutions, vous pouvez également essayer ci-dessous:

public static bool IsPalindrome(string s)
{
    return s == new string(s.Reverse().ToArray());
}
0
Saket
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;
        }
0
Rennish Joseph
public Boolean IsPalindrome(string value)
{
   var one = value.ToList<char>();
   var two = one.Reverse<char>().ToList();
   return one.Equals(two);
}
0
kennydust

Si vous avez juste besoin de détecter un palindrome, vous pouvez le faire avec une regex, comme expliqué ici . Probablement pas l'approche la plus efficace, cependant ...

0
Thomas Levesque

Cette méthode C # vérifiera les chaînes palindromes de longueur paire et impaire (approche récursive):

public static bool IsPalindromeResursive(int rightIndex, int leftIndex, char[] inputString)
{
    if (rightIndex == leftIndex || rightIndex < leftIndex)
        return true;
    if (inputString[rightIndex] == inputString[leftIndex])
        return IsPalindromeResursive(--rightIndex, ++leftIndex, inputString);
    else
        return false;            
}
0
Tabish Habib
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
user3725809

Ce n'est pas trivial, il n'y a pas de méthode intégrée pour le faire pour vous, vous devrez écrire la vôtre. Vous devrez examiner quelles règles vous souhaitez vérifier, comme vous avez implicitement déclaré que vous avez accepté l'inversion d'une chaîne. En outre, vous avez manqué le personnage du milieu, est-ce seulement si sa longueur est impaire? 

Donc, vous aurez quelque chose comme:

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;

etc, aussi faire ce que vous voulez pour les ficelles impaires

0
T. Kiley
    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
Jerko Viskov

Puisqu'un palindrome comprend également des nombres, des mots, des phrases et toute combinaison de ceux-ci, il doit ignorer la ponctuation et la casse ( Voir l'article Wikipedia ).

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
Espen
class Program
{
    static void Main(string[] args)
    {

        string s, revs = "";
        Console.WriteLine(" Enter string");
        s = Console.ReadLine();
        for (int i = s.Length - 1; i >= 0; i--) //String Reverse
        {
            Console.WriteLine(i);
            revs += s[i].ToString();
        }
        if (revs == s) // Checking whether string is palindrome or not
        {
            Console.WriteLine("String is Palindrome");
        }
        else
        {
            Console.WriteLine("String is not Palindrome");
        }
        Console.ReadKey();
    }
}
0