字串反轉方法

2022-08-21 23:57:14 字數 1971 閱讀 2191

1. 使用array.reverse方法

對於字串反轉,我們可以使用.net類庫自帶的array.reverse方法

public static string reversebyarray(string original)

2. 使用字元快取

在面試或筆試中,往往要求不用任何類庫方法,那麼有朋友大概會使用類似下面這樣的迴圈方法

public static string reversebycharbuffer(this string original)

return new string(o);

}當然,聰明的同學們一定會發現不必對這個字元陣列進行完全遍歷,通常情況下我們會只遍歷一半

public static string reversebycharbuffer2(string original)

return new string(c);

}reversebycharbuffer使用了乙個新的陣列,而且遍歷了字元陣列的所有元素,因此時間和空間的開銷都要大於reversebycharbuffer2。

在array.reverse內部,呼叫了非託管方法tryszreverse,如果tryszreverse不成功,實際上也是呼叫了類似reversebycharbuffer2的方法。

if (!tryszreverse(array, index, length))

}else}}

大致上我能想到的演算法就是這麼多了,但是我無意間發現了stackoverflow上的一篇帖子,才發現這麼乙個看似簡單的反轉演算法實現起來真可謂花樣繁多。

3. 使用stringbuilder

public static string reversebystack(this string original)

char c = new char[original.length];

for (int i = 0; i < original.length; i++)

return new string(c);

}兩次迴圈和棧的開銷無疑使這種方法成為目前為止開銷最大的方法。但使用棧這個資料結構的想法還是非常有價值的。

使用xor

5. 使用邏輯異或也可以進行反轉

public static string reversebyxor(string original)

return new string(chararray);

}在c#中,x ^= y相當於x = x ^ y。通過3次異或操作,可以將兩個字元為止互換。對於演算法具體的解釋可以參考這篇文章。

6. 使用指標

使用指標可以達到最快的速度,但是unsafe**不是微軟所推薦的,在這裡我們就不多做討論了

public static unsafe string reversebypointer(this string original)

return original;}}

7. 使用遞迴

對於反轉這類演算法,都可以使用遞迴方法

public static string reversebyrecursive(string original)

8. 使用委託,還可以使**變得更加簡潔

public static string reversebyrecursive2(this string original)

但是委託開銷大的弊病在這裡一點也沒有減少,以至於我做效能測試的時候導致系統假死甚至記憶體益處。

使用linq

9. system.enumerable裡提供了預設的reverse擴充套件方法,我們可以基於該方法來對string型別進行擴充套件

public static string reversebylinq(this string original)

反轉字串方法

前言,之前做過乙個面試題,是將 12345 變成 54321 萌新的我想到的辦法就是迴圈乙個乙個取出來,讓在拼在一起。大哥看了直搖頭,說我目光短淺。然後跟我分享一種辦法,1.先將字串轉換為陣列 split 2.利用陣列的反序函式調位置 3.用join從陣列變成字串 聽完大哥講的話,我只想說一句 秒啊...

js反轉字串方法

自定義實現反轉字串的方法 str reverse param string str 要反轉的字串 return string newstr 反轉之後的字串結果 第一種 function str reverse str 第二種 function str reverse str console.log ...

字串反轉方法收集

1.單位元組字串反轉 php提供了現成的用於字串反轉的函式strrev str abcdef123 echo strrev str 2.對於包含中文的多位元組字串需要用到mb substr str 字串反轉 function rev str,encoding utf 8 return result ...