微软第二题 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);  
        }  
    }  
  
}  

全部评论

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务