微软第二题 Composition

一开始时间复杂度为 N*N的做法超时,然后换成C++写了一下还是TLE。
然后换成26*N后AC 了

import java.util.Arrays;  
import java.util.Scanner;  
  
public class Main {  
    static int N,M;  
    static int[][] map;  
    static int[] numlist;  
    static String str;  
    static int res;  
    static int[] dp;  
    public static void main(String[] args){  
        Scanner sc=new Scanner(System.in);  
        int a,b;  
        while(sc.hasNext()){  
            N=sc.nextInt();  
            str=sc.next();  
            numlist=new int[N];  
            map=new int[26][26];  
            dp=new int[26];  
            for(int i=0;i<N;i++){  
                numlist[i]=str.charAt(i)-'a';  
            }  
            M=sc.nextInt();  
            for(int i=0;i<M;i++){  
                str=sc.next();  
                a=str.charAt(0)-'a';  
                b=str.charAt(1)-'a';  
                map[a][b]=1;  
                map[b][a]=1;  
            }  
            for(int i=0;i<N;i++){  
                if(dp[numlist[i]]>0){  
                    if(map[numlist[i]][numlist[i]]!=1) dp[numlist[i]]=dp[numlist[i]]+1;  
                }  
                else dp[numlist[i]]=1;  
                for(int j=0;j<26;j++){  
                    if(map[numlist[i]][j]!=1&&dp[j]>0&&numlist[i]!=j){  
                        dp[numlist[i]]=Math.max(dp[numlist[i]], dp[j]+1);  
                    }  
                }  
            }  
            res=1;  
            for(int i=0;i<26;i++){  
                res=Math.max(res, dp[i]);  
            }  
            System.out.println(N-res);  
        }  
    }  
  
}  

全部评论

相关推荐

09-03 17:49
已编辑
四川大学 供应链管理
迷茫的大四🐶:提前实习有些坑的,卡毕业后薪资以及能力不达预期提前违约这种
我的OC时间线
点赞 评论 收藏
分享
用微笑面对困难:只要你保证项目和获奖都是真的就行尤其是“对战,总负责人”啊这些套职,基本上队员,打杂的都这么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务