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

全部评论

相关推荐

面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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