2013-06-23 93 views
3

假設我有一定數量的字符串,說n,以隨機順序存儲在一個數組中。有幾個,比如m1,是string1m2的anagrams是string2等等的anagrams。 將一個有效的算法分離出特定字符串的字符串並確定每個字符串的字符串數量會是多少?單獨的不同字典

回答

1

一個有趣的問題。我們對一個字謎的瞭解真的歸結爲兩件事。

  • 它們的長度相同。
  • 它們由相同的字符組成。

確定第一個條件很簡單,第二個,沒那麼多。通過首先按長度對字符串數組進行排序,可以限制必須執行第二次測試的字符串數量。

第二次測試似乎要求您不僅檢查string1.contains(string2 [n]),還要確定它們在每個字符串中出現的次數相同。我可能想要一個字符串數組的副本,但我會把它作爲一個char []數組,因爲字符串是不可變的。然後我可以通過其組件字符對副本中的每個字符串進行排序。 Anagrams現在可以匹配string1 == string2。

0
#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[100],b[100],c[100],d[100]; 
    char temp; 
    int i,j; 
    printf("Enter the first string\n"); 
     gets(a); 
     printf("Enter the second string\n"); 
     gets(b); 
    strcpy(d,a); 
    strcpy(c,b); 
    for(i=0;i<strlen(a);i++) 
    { 
    if(a[i]==' ') 
    { 
    temp=a[i]; 
    a[i]=a[i+1]; 
     a[i+1]=temp; 
    } 
    } 
    a[strlen(a)]='\0'; 
    for(j=0;j<strlen(b);j++) 
    { 
    if(b[j]==' ') 
    { 
     temp=b[j]; 
     b[j]=b[j+1]; 
     b[j+1]=temp; 
    } 
} 
    b[strlen(b)]='\0'; 
if(strlen(a)==strlen(b)) 
    for(i=0;i<strlen(a);) 
    { 
     for(j=i;j<strlen(b);j++) 
     { 
     if(a[i]==b[j]) 
     { 
      temp=b[i]; 
     b[i]=a[i]; 
     b[j]=temp; 
      i++; 
      break; 
     } 
     } 
     } 
if(strcmp(a,b)==0) 
     printf("%s and %s are anagrams\n",d,c); 
     else 
     printf("%s and %s are not anagrams\n",d,c); 
     return(0); 
    }