【CareerCup】 Arrays and Strings—Q1.4

來源:互聯網
上載者:User

轉載請註明出處:


    題目:

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

    翻譯:

    寫一個方法來判斷兩個字串是否互為變位詞。

    註:如果構成兩個字串的字元完全相同,而對應字元所處的位置不同,則稱這兩個字串互為變位詞。如:"abbfcad"和"facbdab"互為變位詞。

    思路:

    很多人應該一下子就能想到對兩個字串按照在字典中出現的先後順序進行排序,而後再對排序後的兩個字串逐個比較,如果兩個字串相等,則二者互為變位詞,否則,不互為變位詞。

    事實上,和Q1.1的思路一樣,我們同樣沒有必要對字串進行排序,我們同樣可以利用雜湊的思想(到現在為止,四個題目中已經有三個用到了雜湊的思想),開闢一個大小為26(假設字串中的字元為26個小寫字母)的int數組,初始值均為0,先對第一個字串進行映射,每個字元在該字串中出現一次,數組的對應位置的值就加1,而後再對第二個字串進行映射,每個字元在該字串中出現一次,數組中對應位置的值就減1,如果最後該數組的所有元素值均為0,則說明這兩個字串互為變位詞。該方法的時間複雜度為O(n)。

    實現代碼:

/****************************題目描述:判斷兩個字串是否互為變位詞Date:2014-03-17****************************/#define MAX 26#include<iostream>#include<cstring>using namespace std;bool anagram(string s1,string s2){int len1 = s1.length();int len2 = s2.length();if(len1 != len2)return false;int i;int A[MAX];memset(A,0,sizeof(A));for(i=0;i<len1;i++){int index = s1[i] - 'a';A[index]++;}for(i=0;i<len1;i++){int index = s2[i] - 'a';A[index]--;}for(i=0;i<MAX;i++)if(A[i] > 0)return false;return true;}int main(){string s1 = "abbfcad";string s2 = "facbdab";if(anagram(s1,s2))cout<<"s1 and s2 are anagrams"<<endl;elsecout<<"s1 and s2 are not anagrams"<<endl;string s3 = "abbfcad";string s4 = "facbkab";if(anagram(s3,s4))cout<<"s3 and s4 are anagrams"<<endl;elsecout<<"s3 and s4 are not anagrams"<<endl;return 0;}
      測試結果:   



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.