[LeetCode] Valid Anagram - 字符串排序比较系列
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                [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,其中t是次序打亂的字符串,如果兩個字符串相同則返回true,否則false。方法包括:(參考)
? ? ? ? 方法一
? ? ? ? 最簡單的方法就是字符串s和t分別排序,在比較兩個字符串是否相同。但是會報錯TLE- Time Limit Exceeded
? ? ? ? 同樣采用選擇排序每次比較最小字符,不同則跳出循環返回false也TLE。
bool isAnagram(char* s, char* t) {int ls,lt; //字符串長度int i,j;char ch;if(s==NULL&&t==NULL)return true;ls=strlen(s);lt=strlen(t);if(ls!=lt)return false;//方法一 排序后判斷字符串是否相等for(i=0; i<ls; i++) {for(j=i+1; j<ls; j++) {if(s[i]>=s[j]) {ch=s[i];s[i]=s[j];s[j]=ch;}if(t[i]>=t[j]) {ch=t[i];t[i]=t[j];t[j]=ch;}}}if(strcmp(s,t)==0)return true;elsereturn false; } ? ? ? ? 方法二
? ? ? ? 后來百度下發現如果采用Java代碼,通過調用內部的sort排序則會AC,但個人不喜歡調用內部函數的方法。
public class Solution { public boolean isAnagram(String s, String t) { char[] sArr = s.toCharArray(); char[] tArr = t.toCharArray(); Arrays.sort(sArr); Arrays.sort(tArr); return String.valueOf(sArr).equals(String.valueOf(tArr)); } } ? ? ? ? C++調用sort排序代碼如下:
class Solution { public:bool isAnagram(string s, string t) {sort(s.begin(), s.end());sort(t.begin(), t.end());return s == t;} }; ? ? ? ? 方法三
? ? ? ? 計算字符串字母個數,比較值都相同則true,否則返回false。
? ? ? ? 方法四 (強推)
? ? ? ??通過一個長度為26的整形數組,對應英文中的26個字母a-z。從前向后循環字符串s和t,s中出現某一字母則在該字母在數組中對應的位置上加1,t中出現則減1。如果在s和t中所有字符都循環完畢后,整型數組中的所有元素都為0,則可認為s可由易位構詞生成t。 bool isAnagram(char* s, char* t) {int ls,lt; //字符串長度int i;int num[26]={0};if(s==NULL&&t==NULL)return true;ls=strlen(s);lt=strlen(t);if(ls!=lt)return false;//方法四 計算字母個數 s中出現+1,t中出現-1,整個數組26個數都為0時則表示相同for(i=0; i<ls; i++) {num[s[i]-'a']++;num[t[i]-'a']--;}for(i=0; i<26; i++) {if(num[i]!=0)return false;}return true; } ? ? ? ? 而且最后的時間結果也比較優秀: C++調用sort代碼-76ms;?Java調用sort代碼-288ms;C語言計算字母個數-0ms。
(By:Eastmount 2015-9-14 清晨7點半? ?? http://blog.csdn.net/eastmount/ )
總結
以上是生活随笔為你收集整理的[LeetCode] Valid Anagram - 字符串排序比较系列的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: [LeetCode] Number of
- 下一篇: [LeetCode] Reverse L
