記得曾經一次面試時,面試官給我電腦,讓我現場寫個算法,判斷一個字符串是不是對稱字符串。我當時用了幾分鐘寫了一個很簡單的代碼。
這裡說的對稱字符串是指字符串的左邊和右邊字符順序相反,如"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); }
這個方案就是將字符串拆成兩半,將後一半反轉跟前一半比較。
效果也能實現,沒用遍歷,看起來比上個方案要高大上,實際運行效率更低。
這兩種方案只是入門級別的,肯定還有更好,更高效率的寫法,請求各位大神分享.謝謝!
如果覺得對你有幫助,請點個贊,謝謝!
不足與錯誤之處,敬請批評指正!