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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Cracking the coding interview--Q1.4

發(fā)布時(shí)間:2025/3/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cracking the coding interview--Q1.4 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目

原文:

Write a method to decide if two strings are anagrams or not.

譯文:

寫一個(gè)函數(shù)判斷兩個(gè)字符串是否是變位詞。

解答

變位詞(anagrams)指的是組成兩個(gè)單詞的字符相同,但位置不同的單詞。比如說, abbcd和abcdb就是一對(duì)變位詞。該題目有兩種做法:

O(nlogn)的解法

由于組成變位詞的字符是一模一樣的,所以按照字典序排序后,兩個(gè)字符串也就相等了。 因此我們可以用O(nlogn)的時(shí)間去排序,然后用O(n)的時(shí)間比較它們是否相等即可。

代碼如下:

bool isAnagram1(string s, string t){if(s=="" || t=="") return false;if(s.length() != t.length()) return false;sort(&s[0], &s[0]+s.length());sort(&t[0], &t[0]+t.length());if(s == t) return true;else return false; }

O(n)的解法

由于組成變位詞的字符是一模一樣的, 因此我們可以先統(tǒng)計(jì)每個(gè)字符串中各個(gè)字符出現(xiàn)的次數(shù), 然后看這兩個(gè)字符串中各字符出現(xiàn)次數(shù)是否一樣。如果是,則它們是一對(duì)變位詞。 這需要開一個(gè)輔助數(shù)組來(lái)保存各字符的出現(xiàn)次數(shù)。我們可以開一個(gè)大小是256的整數(shù)數(shù)組, 遍歷第一個(gè)字符串時(shí),將相應(yīng)字符出現(xiàn)的次數(shù)加1;遍歷第二個(gè)字符串時(shí), 將相應(yīng)字符出現(xiàn)的次數(shù)減1。最后如果數(shù)組中256個(gè)數(shù)都為0,說明兩個(gè)字符串是一對(duì)變位詞。 (第1個(gè)字符串中出現(xiàn)的字符都被第2個(gè)字符串出現(xiàn)的字符抵消了), 如果數(shù)組中有一個(gè)不為0,說明它們不是一對(duì)變位詞。

代碼如下:

bool isAnagram(string s, string t){if(s=="" || t=="") return false;if(s.length() != t.length()) return false;int len = s.length();int c[256];memset(c, 0, sizeof(c));for(int i=0; i<len; ++i)++c[(int)s[i]];for(int i=0; i<len; ++i)--c[(int)t[i]];for(int i=0; i<256; ++i)if(c[i] != 0)return false;return true; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/sooner/p/3179940.html

總結(jié)

以上是生活随笔為你收集整理的Cracking the coding interview--Q1.4的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。