牛客网NC61,60,55-20.7.26-栈、栈、贪心

博客详细解析了牛客网的三道题目,NC61利用栈进行字符串处理,通过比较相邻单词的首尾字符实现消去操作;NC60同样使用栈解决,具体策略不详;NC55问题采用贪心策略,每次操作都将最大值翻倍。每道题目的解题思路包括栈的模拟和贪心算法的应用,并附带相应代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NC61
链接牛客网NC61
题意、输入、输出
在这里插入图片描述
分析:如题所述,将前一个单词的末尾与后一单词的开头比较,相同消掉。
思路:栈或者模拟栈、以字符为单位入栈,栈为空该单词所以字符入栈,栈不为空比较栈顶元素与当前单词的字符,相同出栈,比较单词的下一个字符,直到不相同后将剩下的单词字符全部入栈,反转输出。
代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param Words string字符串一维数组 
     * @return string字符串
     */
    public String WordsMerge (String[] Words) {
        // write code here
        StringBuilder hh=new StringBuilder(Words[0]);
        for(int i=1;i<Words.length;i++){
            int index=hh.length()-1;
            int tindex=0;
            String hhh=Words[i];
            while(index>=0&&tindex<hhh.length()&&hh.charAt(index)==hhh.charAt(tindex)){
                tindex++;
                index--;
            }
            hh.delete(index+1,hh.length());
            if(tindex<hhh.length())hh.append(hhh.substring(tindex));
        }
        return hh.toString();
    }
}

NC60
链接牛客网NC60
题意、输入、输出在这里插入图片描述
分析:如题所述
思路:栈或者模拟栈
代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return string字符串
     */
    public String Typing (String s) {
        // write code here
        char[] str=new char[s.length()];
        int cnt=0;
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            if(c=='<') {
                if (cnt > 0) cnt--;
            }
            else str[cnt++]=c;
        }
        return new String(str).substring(0,cnt);
    }
}

NC55
链接牛客网NC55
题意、输入、输出
在这里插入图片描述
分析:如题所述
思路:每次出手都翻倍最大值。
代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param n int整型 
     * @param m int整型 
     * @param x int整型一维数组 
     * @return int整型
     */
    public int Holy (int n, int m, int[] x) {
        // write code here
        long sum=0;
        long maxx=x[0];
        for(int i=0;i<m;i++){
            sum+=x[i];
            if(x[i]>maxx)maxx=x[i];
        }
        if(n-sum<=0)return 0;
        long need=n-sum+maxx;
        int cnt=0;
        while(need>maxx){
            maxx<<=1;
            cnt++;
        }
        return cnt;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值