雜湊表以及雜湊的應用

來源:互聯網
上載者:User

該博文主要介紹幾種利用雜湊思想的簡單的面試題

1  第一個只出現一次的字元在字串中找出第一個指出先一次的字元,如輸入"adsaaddsef",則輸出'e'思想:引入一個256個元素的字元數組,用來儲存輸入字串的字元的次數,然後遍曆該數組,直到數組元素為1時停止遍曆,並輸出該元素代碼:
char findFirstAppeared(char *str){if(str==NULL)  return 0;char num[256] = "";char *p=str;while(*p){num[*p]++;p++;}p = str;while(*p){if(num[*p]==1)return *p;p++;}return 0;}
2.從第一個字串中刪除在第二個字串中出現過的字元思想:利用額外數組存放第二個字串中字元。然後遍曆第一個字串,刪除數組中值為1的元素代碼
void deleteCharact(char *str, const char *mainStr){
        if(str==NULL || mainStr==NULL)  return ;
int a[256];memset(a, 0, sizeof(a));char *p = str;char *q=NULL;while(*mainStr)a[*mainStr++]++;while(*p){if(a[*p]){q=p;while(*q){*q=*(q+1);q++;     //this must be paied more attention}}p++;}}

3 刪除字串中重複的字元

思想和上面差不多,都是利用雜湊映射的思想代碼如下:
void deleteRepeat(char *pStr){if(pStr==NULL)return ;char a[256];memset(a, 0, sizeof(a));char *q = NULL;char *p = pStr;while(*p){if((++a[*p])>1)//delete *pStr{q=p;while(*q){*q = *(q+1);q++;}}else//not find same characterp++;}}

4 判段兩個字串是否為變為詞變位詞:如果兩個單詞中出現的字母相同,並且每個字元出現的次數也相同。代碼如下

int isAnagrams(char *pFirst, char *pSecond){char aux[256];memset(aux, 0, sizeof(aux));char *p = pFirst;char *q = pSecond;while(*p){aux[*p]++;p++;}while(*q){if(aux[*q])aux[*q]--;q++;}int i=0;while(aux[i]==0&&i<256)i++;if(i==256)return 1;elsereturn 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.