23

入力として文字列があり、文字列を 2 つの部分文字列に分割する必要があります。左の部分文字列が右の部分文字列と等しい場合は、何らかのロジックを実行します。

これどうやってするの?

サンプル:

public bool getStatus(string myString)
{

}

例: myString = "ankYkna", したがって、2 つの部分文字列に分割すると left-part = "ank"、 , right-part = "ank"(反転後) になります。

4

33 に答える 33

89

楽しみのために:

return myString.SequenceEqual(myString.Reverse());
于 2012-03-20T18:21:36.233 に答える
30
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);
}
于 2012-03-20T16:31:35.420 に答える
23
int length = myString.Length;
for (int i = 0; i < length / 2; i++)
{
    if (myString[i] != myString[length - i - 1])
        return false;
}
return true;
于 2012-03-20T16:35:28.023 に答える
16

LINQを使用し、最良のソリューションからはほど遠いコース外

var original = "ankYkna";
var reversed = new string(original.Reverse().ToArray());
var palindrom = original == reversed;
于 2012-03-20T16:37:28.350 に答える
13

を使用した 1 行のコードLinq

public static bool IsPalindrome(string str)  
{
    return str.SequenceEqual(str.Reverse());
}
于 2012-12-16T03:01:33.637 に答える
3

//この 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;
        }
于 2013-07-20T20:48:41.040 に答える
1
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;
        }
于 2016-02-14T17:44:05.147 に答える
1

使いやすい文字列拡張メソッド:

    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();
    }
于 2016-08-26T22:59:18.887 に答える
1

これは、回文をチェックするための短くて効率的な方法です。

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;

}
于 2018-07-17T20:13:30.573 に答える
0

これは簡単なことではありません。それを行うための組み込みのメソッドはありません。独自のメソッドを作成する必要があります。1つの文字列の反転を受け入れたと暗黙的に述べたように、チェックするルールを検討する必要があります。また、真ん中のキャラクターを見逃しましたが、これは奇数の場合のみですか?

したがって、次のようなものになります。

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;

など、奇数の文字列に対しても好きなことをします

于 2012-03-20T16:33:15.760 に答える
0

この C# メソッドは、偶数および奇数の長さの回文文字列をチェックします (再帰的アプローチ)。

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;            
}
于 2013-07-20T21:55:57.140 に答える
0
public Boolean IsPalindrome(string value)
{
   var one = value.ToList<char>();
   var two = one.Reverse<char>().ToList();
   return one.Equals(two);
}
于 2014-04-23T05:11:19.587 に答える
0

回文を検出する必要があるだけの場合は、こちらで説明されているように、正規表現を使用して検出できます。おそらく最も効率的なアプローチではありませんが...

于 2012-03-20T16:30:23.720 に答える
0

これを行うための絶対に簡単な方法を次に示します。

  1. メソッドへの入力として単語を受け取ります。
  2. 一時変数を元の値に割り当てます。
  3. 最初の単語をループし、最初の単語の文字がなくなるまで、作成中の反転に最後の文字を追加します。
  4. 作成したスペアを使用して元の値を保持し、構築されたコピーと比較します。

int と double をキャストする必要がないので、これは良い方法です。U は、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);
    }

したがって、メインメソッドから、偶数および奇数の長さの文字列の場合、文字列全体をメソッドに渡すだけです。

于 2016-10-20T06:15:33.480 に答える
0
    public static bool IsPalindrome(string str)
    {
        int i = 0;
        int a = 0;

        char[] chr = str.ToCharArray();
        foreach (char cr in chr)
        {
            Array.Reverse(chr);
            if (chr[i] == cr)
            {
                if (a == str.Length)
                {
                    return true;
                }
                a++;
                i++;
            }
            else
            {
                return false;
            }
        }
        return true;
    }
于 2019-09-18T10:28:43.197 に答える