程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#算法之判斷一個字符串是否是對稱字符串,

C#算法之判斷一個字符串是否是對稱字符串,

編輯:C#入門知識

C#算法之判斷一個字符串是否是對稱字符串,


記得曾經一次面試時,面試官給我電腦,讓我現場寫個算法,判斷一個字符串是不是對稱字符串。我當時用了幾分鐘寫了一個很簡單的代碼。

這裡說的對稱字符串是指字符串的左邊和右邊字符順序相反,如"abba",單個字符串暫且算非對稱字符串,雖然有字符串看起來是對稱的如"A、"H"、"O"、"中"、"人"...,嚴格來說,也是不對稱的,把它們放大時,線條的粗細是不一樣的。

static bool IsSymmetry1(string str)
{
    if (string.IsNullOrEmpty(str) || str.Length == 1)
    {
        return false;
    }
    for (int i = 0; i < str.Length / 2; i++)
    {
        if (str[i] != str[str.Length - 1 - i])
        {
            return false;
        }
    }
    return true;
}

這個很簡單,最多遍歷字符串長度的一半次數,對比第一個跟倒數第一個,第二個跟倒數第二個...

功能是實現了,但給人的感覺是太簡單,效率也不高。既然是算法,那就得效率高。

我跟朋友討論了下,朋友給了另一個方案

static bool IsSymmetry2(string str)
{
    if (string.IsNullOrEmpty(str) || str.Length == 1)
    {
        return false;
    }
    var halfLength = str.Length/2;
    var str1 = str.Substring(0, halfLength);
    var str2 = new String(str.Substring(str.Length%2 == 0 ? halfLength : halfLength + 1, halfLength).Reverse().ToArray());
    return str1.Equals(str2);            
}

這個方案就是將字符串拆成兩半,將後一半反轉跟前一半比較。

效果也能實現,沒用遍歷,看起來比上個方案要高大上,實際運行效率更低。

這兩種方案只是入門級別的,肯定還有更好,更高效率的寫法,請求各位大神分享.謝謝!

如果覺得對你有幫助,請點個贊,謝謝!

不足與錯誤之處,敬請批評指正!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved