zoukankan      html  css  js  c++  java
  • 【leetcode】自由之路

    typedef struct st{
        int pst;
        int* arr;
    }st;
    #define min(a,b) (a)<(b)?(a):(b)
    
    int findRotateSteps(char * ring, char * key){
        int i,j,k,minStep=100000,val;
        int keylen=strlen(key), ringlen=strlen(ring);
        st ans[128]={0};
        int* step=(int*)calloc(ringlen,sizeof(int));
        for (i=0; i<ringlen; i++)
        {
            if (strchr(key,ring[i]))
            {
                if (ans[ring[i]].pst == 0)
                    ans[ring[i]].arr=(int*)calloc(ringlen,sizeof(int));
                ans[ring[i]].arr[(ans[ring[i]].pst)++]=i;
            }
        }
        for (i=keylen-2; i>=0; i--)
        {
            int* temp=(int*)calloc(ans[key[i]].pst,sizeof(int));
            memset(temp,0x7f, ans[key[i]].pst*sizeof(int));
            for (j=0; j<ans[key[i]].pst; j++)
            {
                for (k=0; k<ans[key[i+1]].pst; k++)
                {
                    val=min(abs(ans[key[i+1]].arr[k] - ans[key[i]].arr[j]),ringlen-abs(ans[key[i+1]].arr[k] - ans[key[i]].arr[j]));
                    if (val+step[k] < temp[j])
                        temp[j]=val+step[k];
                }
            }
            step=temp;
        }
        for (k=0; k<ans[key[0]].pst; k++)
        {
            val=min(ans[key[0]].arr[k],ringlen-ans[key[0]].arr[k]);
            if (val+step[k] < minStep)
                minStep=val+step[k];
        }
        return minStep+keylen;
    }
  • 相关阅读:
    Java创建多线程的方法
    Spring Cloud 学习笔记 来自csdn
    Java线程退出
    Java线程的中断与插入
    Java守护线程
    Linux安装jdk
    内部类
    枚举,包类型
    jenkins
    设计模式之装饰者模式
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13960857.html
Copyright © 2011-2022 走看看