庞果网 字符串消除

 题目:

给定一个字符串,仅由a,b,c 3种小写字母组成。
当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出现,你把它们替换为字母c;
有ac或ca连续出现时,你可以把它们替换为字母b; 有bc或cb 连续出现时,你可以把它们替换为字母a。
你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。
输入:字符串。长度不超过200,仅由abc三种小写字母组成。 输出: 按照上述规则不断消除替换,所得到的字符串最短的长度。
例如:输入cab,输出2。因为我们可以把它变为bb或者变为cc。
输入bcab,输出1。尽管我们可以把它变为aab -> ac -> b,也可以把它变为bbb,但因为前者长度更短,所以输出1。 函数头部: C/C++ int minLength(const char *s);
Java: public class Main { public static int minLength(String s);

void f(int* a,int i,int number)//去掉字符
{
        while(i<number)
       {
          a[i]=a[i+1];i++;
        }
}

int Getx(int a[],int number)//获得消除字符后字符的长度
{
int i;bool flag=true;
  while(flag)//消除字符开始 
  {
          for(i=1;i<number;i++)
         {
               if(a[i]!=a[i-1])
          {
                   switch(a[i]*a[i-1])//判断缺少那个字符,也就是消除字符的规则 
               {
                        case 2:
                        a[i-1]=3;
                        f(a,i,number);
                        number-=1;
                        break;
                        case 3:
                        a[i-1]=2;
                        f(a,i,number);
                        number-=1;
                        break;
                        case 6:
                        a[i-1]=1;
                        f (a,i,number);
                        number-=1;
                        break;
                }
        }
     }
        flag=false;
       for(i=1;i<number;i++)//判断是否还有别的字符 
      {
             if(a[i]!=a[i-1])
            {
                flag=true;
                 break;
             }
      }
   }
           return number;//返回长度 
}

int minLength(const char *s)
{
int i=0,j=0,number=0,x1=0,x2=0;
for(i=0;s[i];i++);//获得字符串的长度(其实可以不用的,不过自己比较懒也就懒得改了)
number=i;
int* a=new int[number];
int* b=new int[number];
for(i=0;s[i];i++)//在a,b,c换为数字
{
        switch(s[i])
        {
          case 'a':
          b[j]=a[j]=1;
          j++;
          break;
         case 'b':
         b[j]=a[j]=2;
         j++;
         break;
         case 'c':
         b[j]=a[j]=3;
         j++;
         break;
       }
}
sort(a,a+number);//对a排序,b不排
x1=Getx(a,number);
x2=Getx(b,number);
if(x1>=x2)return x2;
else return x1;
}

欢迎指教。

posted @ 2013-08-31 17:22  小小Eason  阅读(330)  评论(0编辑  收藏  举报