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; } }