【问题标题】:In C#, How can I determine if a given string is a palindrome or not? [duplicate]在 C# 中,如何确定给定字符串是否为回文? [复制]
【发布时间】:2016-06-09 05:21:10
【问题描述】:

我目前想知道如果给定字符串(单词),我如何确定它是否是回文。回文是向前或向后阅读时相同的单词或短语。我想我可以通过遍历单词的一半并将每个字母与另一半进行比较来解决这个问题。例如:(word[0] == word[word.Length-1-0]) 会将单词的第一个字母与最后一个字母进行比较,(word[1] == word[word.Length-1-1]) 将第二个字母与倒数第二个字母进行比较。

  • 示例输入可能是:racecar

  • 示例输出:

我是否以正确的解决方案正确地处理了这个问题?

这是我到目前为止写下来的一些内容。

public bool Test6(string word)
        {
            for (int i = 0; i < word.Length; i++)
            {
                if (word[0] == word[word.Length - 1 - 0])
                {

                }

【问题讨论】:

  • 到达那里 - 这是正确的方法。一个观察:循环计数器只需要字符串长度的一半(想想为什么会这样)。
  • 那个链接的重复问题......标记的答案......哦,我的。我的建议:继续你自己的方法,不要使用链接问题中的答案!这不是这个问题的真正答案。
  • 我不能写答案,所以我必须把它放在评论中(你必须重新格式化它才能阅读):public static bool IsPalindrome(string s){ for (int i = 0, j = s.Length-1; i &lt; j; ++i, --j) if (s[i] != s[j]) return false; return true; } - Or try the code here

标签: c# palindrome


【解决方案1】:

我会这样做(很快)。

string input = "..."
string reverse =  new string(input.ToCharArray().Reverse().ToArray());

if(input.Equals(reverse)
{
   // polindrome.
}

【讨论】:

  • 您应该将char[] 传递给字符串构造函数。所以你需要在.Reverse()之后调用.ToArray()
  • @RezaAghaei 好地方,已更新。谢谢。
【解决方案2】:

使用 LINQ 的较短版本是

bool IsPalindrome(string x)
{
   return Enumerable.Range(0,x.Length/2).All(e => x[e] == x[x.Length-1-e]);
}

【讨论】:

    【解决方案3】:

    请在下面找到代码

    using System;
    using System.Linq;
    
    class MyClass
    {
        static void Main(string[] args) {
            string str = Console.ReadLine();
    
            string backwardsGuy = new string(str.Reverse().ToArray());
            if(str==backwardsGuy)
            {
                Console.WriteLine("True");
            }
            else
            {
                Console.WriteLine("False");
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      请点击此链接http://www.dotnetperls.com/palindrome

      您可以使用此示例而不使用任何内置方法:

      using System;
      
      class Program
      {
          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];
              if (char.ToLower(a) != char.ToLower(b))
              {
              return false;
              }
              min++;
              max--;
          }
          }
      
          static void Main()
          {
          string[] array =
          {
              "civic",
              "deified",
              "deleveled",
              "devoved",
              "dewed",
              "Hannah",
              "kayak",
              "level",
              "madam",
              "racecar",
              "radar",
              "redder",
              "refer",
              "repaper",
              "reviver",
              "rotator",
              "rotor",
              "sagas",
              "solos",
              "sexes",
              "stats",
              "tenet",
      
              "Dot",
              "Net",
              "Perls",
              "Is",
              "Not",
              "A",
              "Palindrome",
              ""
          };
      
          foreach (string value in array)
          {
              Console.WriteLine("{0} = {1}", value, IsPalindrome(value));
          }
          }
      }
      

      【讨论】:

      • 这个答案可以说是对 Sam Allen 的代码的临界剽窃,该代码是 copyright 2007-2016。我不认为该链接表明您引用了外国来源
      • @MickyD 我在该网站上找到确切答案后添加了链接
      • 除此之外它与 Hari 的 fine answer 相比过于冗长
      • @MickyD 这不是一个好的答案。它的效率非常低,并且会生成多个不必要的字符串副本。 OP 已经在寻找正确答案的路上了。
      • @MatthewWatson Meh。来自链接的重复问题的This answerthis one 在公众舆论方面似乎不同意您
      【解决方案5】:

      示例代码-

      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
                  {
                      revs += s[i].ToString();
                  }
                  if (revs == s) // Checking whether string is palindrome or not
                  {
                      Console.WriteLine("String is Palindrome \n Entered String Was {0} and reverse string is {1}", s, revs);
                  }
                  else
                  {
                      Console.WriteLine("String is not Palindrome \n Entered String Was {0} and reverse string is {1}", s, revs);
                  }
                  Console.ReadKey();
              }
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 2011-03-26
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2011-04-22
        相关资源
        最近更新 更多