日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[LeetCode] Valid Anagram - 字符串排序比较系列

發布時間:2024/5/28 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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 - 字符串排序比较系列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。