21年11月第二周 力扣每日一题记录

本周每日一题 题目

  • lc 299. 猜数字游戏
  • lc 520. 检测大写字母

这一周写的很少,因为在忙毕设,认认真真的写了好几天的代码,所以错过了每日一题就错过了把,不是啥问题,有空就做

11-08 lc299. 猜数字游戏

  • 两遍循环解决,第一遍是将相同的bull记录下来,同时记下secret有多少个不一样的数字情况,第二遍是将不同的cow计算出来
  • 这里因为出现的样本有限,所以用数组代替map,速度加快
  • 同时,StringBuilder#append的速度大幅领先与String的+
  • 经过优化,最终达到100%时间,70%的空间
class Solution {
    
    
    //就是把对应位置的直接bull,非对应位置的记在map中,就是cow
    //同时遍历两个似乎不大行,先遍历secret,然后再遍历guess,用map进行对比
    //有一个问题,就是相等位置的可能会导致
    public String getHint(String secret, String guess) {
    
    
        StringBuilder sb = new StringBuilder();
        char[] ss = secret.toCharArray(), gg = guess.toCharArray();
        int[] cnt = new int[10];
        int bull = 0, cow = 0;
        for(int i=0; i<gg.length; i++){
    
    
            if(ss[i]==gg[i]) bull++;
            else cnt[ss[i]-'0']++;
        } 
        for(int i=0; i<gg.length; i++){
    
    
            if(ss[i]!=gg[i]&&cnt[gg[i]-'0']>0){
    
    
                cow++;
                cnt[gg[i]-'0']--;
            } 
        }
        return sb.append(bull).append("A").append(cow).append("B").toString();//sb的时间还是比string快太多了
    }
}

11-13 lc520. 检测大写字母

在这里插入图片描述- 这是题目的要求

  • 针对这个要求,我们可以如下的分析题目的解法 ```txt
	第一个字母大写,后面的需要全部保持一致,要么全大,要么全小
    第一个字母小写,后面必须全部小写
  • 如此,那么就很简单了,代码如下
class Solution {
    
    
    public boolean detectCapitalUse(String word) {
    
    
        char[] ss = word.toCharArray();
        int n = ss.length;
        boolean first = ss[0] > 96; //第一个字母情况
        for(int i=1; i<n; i++){
    
    
            if(first){
    
    
                if(ss[i]<96) return false;
            }
            if(i>1){
    
    
                int x = ss[i]>95? 1: 0;
                int y = ss[i-1]>95? 1: 0;
                if((x^y)==1) return false;//异或来进行判断是否一致
            }
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34687559/article/details/121203421