uva-10252-Common Permutation

來源:互聯網
上載者:User

題目大意:

            給你兩個字串,求第一個字串的某一個排列和第二個字串的最長的公用子串。要求按字典順序輸出公用子串。

演算法分析:

            由於是一個串的某個排列(任意順序的),實際上就是求兩個字串相同的字元的個數,並且按照順序輸出即可。我的做法是將兩個字串映射到26個字元的數組中,數組中放的是字元出現的次數,然後比較兩個字串的映射數組,直接輸出較少的那個字元的次數(不為0)。

代碼:

       #include<stdio.h>
#include<string.h>

char str1[1001],str2[10001];
int a1[27],a2[27];

void init()
{
 int len1,len2;
 int i;
 memset(a1,0,sizeof(a1));
 memset(a2,0,sizeof(a2));
 len1=strlen(str1);
 len2=strlen(str2);
 for(i=0;i<len1;i++)
  a1[str1[i]-'a']++;
 for(i=0;i<len2;i++)
  a2[str2[i]-'a']++;
}

int min(int m,int n)
{
 return m<n?m:n;
}

int main()
{
 int i,j;
 while(1)
 {
  memset(str1,0,sizeof(str1));
  memset(str2,0,sizeof(str2));
  if(gets(str1)==NULL)
   break;
  gets(str2);
  init();
  for(i=0;i<26;i++)
  {
   if(a1[i]!=0&&a2[i]!=0)
   {
    for(j=0;j<min(a1[i],a2[i]);j++)
     printf("%c",i+'a');
   }
  }
  printf("/n");
 }
 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.