天天看點

[LeetCode] Valid Anagram - 字元串排序比較系列

題目概述:

given two strings s and t, write a function to determine if t is an anagram of s.

for example,

        s = "anagram", t = "nagaram", return true.

        s = "rat", t = "car", return false.

note: you may assume the string contains only lowercase alphabets.

解題方法:

        方法一

        最簡單的方法就是字元串s和t分别排序,在比較兩個字元串是否相同。但是會報錯tle-time

limit exceeded

        同樣采用選擇排序每次比較最小字元,不同則跳出循環傳回false也tle。

        方法二

        後來百度下發現如果采用java代碼,通過調用内部的sort排序則會ac,但個人不喜歡調用内部函數的方法。

        c++調用sort排序代碼如下:

        方法三

        計算字元串字母個數,比較值都相同則true,否則傳回false。

        方法四 (強推)

        通過一個長度為26的整形數組,對應英文中的26個字母a-z。從前向後循環字元串s和t,s中出現某一字母則在該字母在數組中對應的位置上加1,t中出現則減1。如果在s和t中所有字元都循環完畢後,整型數組中的所有元素都為0,則可認為s可由易位構詞生成t。

      而且最後的時間結果也比較優秀:c++調用sort代碼-76ms; java調用sort代碼-288ms;c語言計算字母個數-0ms。

[LeetCode] Valid Anagram - 字元串排序比較系列