Leetcode Weekly Contest 264(字符串、DFS)

题目链接: Leetcode Weekly Contest 264

1、2047. Number of Valid Words in a Sentence

难度:Easy

代码:

class Solution {
    public int countValidWords(String sentence) {
        int j=0;
        while(j<sentence.length()&&sentence.charAt(j)==' '){
            j++;
        }
        sentence=sentence.substring(j);
        String[] str=sentence.split("\\s+");
        //System.out.println(str.length);
        int res=0;
        for(String s:str){
            //System.out.println(s);
            char[] a=s.toCharArray();
            boolean flag=true;
            int hyphen=0;
            for(int i=0;i<a.length;i++){
                if(hyphen>=2){
                    flag=false;
                    break;
                }
                if(a[i]>='0'&&a[i]<='9'){
                    flag=false;
                    break;
                }
                if(a[i]=='-'){
                    hyphen++;
                    if(i==0||i==a.length-1||a[i-1]>'z'||a[i-1]<'a'||a[i+1]>'z'||a[i+1]<'a'){
                        flag=false;
                        break;
                    }
                    
                }
                if((a[i]=='!'||a[i]=='.'||a[i]==',')&&(i!=a.length-1)){
                    flag=false;
                    break;
                }
            }
            if(flag){
                res++;
            }
        }
        return res;
    }
}

2、2048. Next Greater Numerically Balanced Number

难度:Medium

思路:

暴力把1e6内所有的平衡数求出来,比1e6大的最小平衡数是1224444。

代码:

class Solution {
    public int nextBeautifulNumber(int n) {
        int[] cnt=new int[10];
        int[] arr={1,22,122,212,221,333,1333,3133,3313,3331,4444,14444,22333,23233,23323,23332,32233,32323,32332,33223,33232,33322,41444,44144,44414,44441,55555,122333,123233,123323,123332,132233,132323,132332,133223,133232,133322,155555,212333,213233,213323,213332,221333,223133,223313,223331,224444,231233,231323,231332,232133,232313,232331,233123,233132,233213,233231,233312,233321,242444,244244,244424,244442,312233,312323,312332,313223,313232,313322,321233,321323,321332,322133,322313,322331,323123,323132,323213,323231,323312,323321,331223,331232,331322,332123,332132,332213,332231,332312,332321,333122,333212,333221,422444,424244,424424,424442,442244,442424,442442,444224,444242,444422,515555,551555,555155,555515,555551,666666};
        for(int num:arr){
            if(num>n){
                return num;
            }
        }
        return 1224444;
    }
}

3、2049. Count Nodes With the Highest Score

难度:Medium

思路:

参考高赞回答,用DFS求解。

代码

class Solution {
    public int countHighestScoreNodes(int[] parents) {
        int n=parents.length;
        List<List<Integer>> children=new ArrayList<>();
        for(int i=0;i<n;i++){
            children.add(new ArrayList<>());
        }
        for(int i=1;i<n;i++){
            children.get(parents[i]).add(i);
        }
        int[] numNodes=new int[n];//numNodes[i]表示以i为根节点的子树共有多少个节点
        dfs(0,children,numNodes);
        long maxScore=0L;
        long[] score=new long[n];//score[i]表示移除节点i的得分
        for(int i=0;i<n;i++){
            int remain=n-numNodes[i];//移除掉以i为根节点后还剩下的节点个数
            if(remain>0){
                score[i]=remain;
            }
            else{
                score[i]=1;
            }
            for(int child:children.get(i)){
                score[i]*=numNodes[child];
            }
            maxScore=Math.max(maxScore,score[i]);
        }
        int count=0;
        for(long s:score){
            if(s==maxScore){
                count++;
            }
        }
        return count;
    }
    public int dfs(int node,List<List<Integer>> children,int[] numNodes){
        int numChild=0;
        for(int child:children.get(node)){
            if(numNodes[child]>0){
                numChild+=numNodes[child];
            }
            else{
                numChild+=dfs(child,children,numNodes);
            }
        }
        numNodes[node]=numChild+1;//加上自己本身
        return numNodes[node];
    }
}

4、2050. Parallel Courses III

难度:Hard

思路

暂时不会。

代码

//
上一篇:2018-2019, ICPC, Asia Yokohama Regional Contest 2018


下一篇:【Codeforce Contest 1593 D】