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

全部评论

相关推荐

昨天 18:53
海南大学 Java
华为 Java开发 25K*16
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
西南山:哥,你的技能是在报菜单吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务