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);            
}

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

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM