Q1: 520. Detect Capital

Given a word, you need to judge whether the usage of capitals in it is right or not.

We define the usage of capitals in a word to be right when one of the following cases holds:

  1. All letters in this word are capitals, like "USA".
  2. All letters in this word are not capitals, like "leetcode".
  3. Only the first letter in this word is capital if it has more than one letter, like "Google".

Otherwise, we define that this word doesn't use capitals in a right way.

Solution one, it is clear to follow when you are reading the code(AC):
 class Solution {
public:
bool detectCapitalUse(string word) {
if(word.empty()){
return false;
}
if(word.size() == ){
return true;
}
char* cstr = new char[word.size() + ];
strcpy(cstr, word.c_str());
// first capital
if(cstr[] >= 'A' && cstr[] <= 'Z'){
// second is capital
if(cstr[] >= 'A' && cstr[] <= 'Z'){
for(int i= ; i < word.size(); i++){
if(cstr[i] < 'A' || cstr[i] > 'Z'){
return false;
}
}
return true;
} else {
// second is not capital
for(int i= ; i < word.size(); i++){
if(cstr[i] >= 'A' && cstr[i] <= 'Z'){
return false;
}
}
return true;
}
} else {
// first is not capital
for(int i= ; i < word.size(); i++){
if(cstr[i] >= 'A' && cstr[i] <= 'Z'){
return false;
}
}
return true;
}
}
};

Another solution with std function is as follow, I prefer this solution as it is clear to understand.(AC)

 class Solution {
public:
bool detectCapitalUse(string word) {
if(word.empty()){
return false;
}
if(word.size() == ){
return true;
} // first capital
if(isupper(word[])){
// second is capital
if(isupper(word[])){
for(string::size_type ix= ; ix < word.size(); ix++){
if(!isupper(word[ix])){
return false;
}
}
return true;
} else {
// second is not capital
for(string::size_type ix= ; ix < word.size(); ix++){
if(isupper(word[ix])){
return false;
}
}
return true;
}
} else {
// first is not capital
for(string::size_type ix= ; ix < word.size(); ix++){
if(isupper(word[ix])){
return false;
}
}
return true;
}
}
};

Q2: 525. Contiguous Array

Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.

Example 1:

Input: [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with equal number of 0 and 1.

Example 2:

Input: [0,1,0]
Output: 2
Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.

Note: The length of the given binary array will not exceed 50,000.

Solution one: Dynamic programming(NOT AC, Time Limits Exceed)

I use dynamic programming to update the total number of 1 and 0 before current element(including itself). And loop from start position to current element to update the subarray, the time complexity is O(n*n), it is not smart solution since it takes much space and time.

But it is just part of the problem, the key idea of this problem is to use hash table to find the previous index with the same difference between 1 and 0, and update the maximum length. I will give this as solution two.

 class Solution {
public:
int findMaxLength(vector<int>& nums) {
if(nums.size() < ){
return ;
}
int size = nums.size();
vector<int> zero_cnt(size, );
vector<int> one_cnt(size, );
vector<int> max_len(size, ); max_len[] = ;
if(nums[] == ){
zero_cnt[]++;
} else {
one_cnt[]++;
}
for(int i = ; i < nums.size(); i++){
// state update
if(nums[i] == ){
zero_cnt[i] = zero_cnt[i - ] + ;
one_cnt[i] = one_cnt[i - ];
} else {
zero_cnt[i] = zero_cnt[i - ];
one_cnt[i] = one_cnt[i - ] + ;
} //update max length for each element
if(zero_cnt[i] == one_cnt[i]){
max_len[i] = i + ;
} else {
for(int j = ; j < i; j++){
if((zero_cnt[i] - zero_cnt[j]) == (one_cnt[i] - one_cnt[j])){
max_len[i] = max(max_len[i], i - j);
}
}
}
}
int max_sub_len = ;
for(int i = ; i< max_len.size(); i++){
max_sub_len = max(max_len[i], max_sub_len);
}
return max_sub_len;
}
};

Solution two: Hash table and a sum variable(AC).

This is a smart solution, change 0 to -1, and keep a variable to record the sum of all element by current element.

if sum is 0

  • update the max length is i + 1;

else: look up into the hash table

  • if we already push current sum to hash table, max length update to max(max_len, i - has_table[i]).
  • The reason is we have the same sum, that means all the number between these two indexs is zero, they contain the equal number of 1 and 0.
  • else, put current sum to hash table, the key is sum, the value is index.
  • return max length
 class Solution {
public:
int findMaxLength(vector<int>& nums) {
unordered_map<int, int> diff;
int cur_sum = ;
int max_len = ;
for(int i = ; i < nums.size(); i++){
cur_sum += (nums[i] == ? - : );
if(cur_sum == ){
max_len = i + ;
} else {
if(diff.find(cur_sum) != diff.end()){
max_len = max(max_len, i - diff[cur_sum]);
} else {
diff[cur_sum] = i;
}
}
}
return max_len;
}
};

leetcode contest 20的更多相关文章

  1. 【LeetCode算法-20】Valid Parentheses

    LeetCode第20题 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determin ...

  2. LeetCode Contest 166

    LeetCode Contest 166 第一次知道LeetCode 也有比赛. 很久没有打过这种线上的比赛,很激动. 直接写题解吧 第一题 很弱智 class Solution { public: ...

  3. LeetCode Weekly Contest 20

    1. 520. Detect Capital 题目描述的很清楚,直接写,注意:字符串长度为1的时候,大写和小写都是满足要求的,剩下的情况单独判断.还有:我感觉自己写的代码很丑,判断条件比较多,需要改进 ...

  4. [Leetcode][Python]20: Valid Parentheses

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 20: Valid Parentheseshttps://oj.leetcod ...

  5. 【一天一道LeetCode】#20. Valid Parentheses

    一天一道LeetCode系列 (一)题目 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  6. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  7. LeetCode:20. Valid Parentheses(Easy)

    1. 原题链接 https://leetcode.com/problems/valid-parentheses/description/ 2. 题目要求 给定一个字符串s,s只包含'(', ')',  ...

  8. C# 写 LeetCode easy #20 Valid Parentheses

    20.Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  9. LeetCode题解(20)--Valid Parentheses

    https://leetcode.com/problems/valid-parentheses/ 原题: Given a string containing just the characters ' ...

随机推荐

  1. 【树莓派】制作树莓派最小镜像:img裁剪瘦身

    制作树莓派镜像,可以参考这篇文章:http://blog.csdn.net/talkxin/article/details/50456282 摘录部分要点内容如下(如果作者不允许转载,请联系即删除): ...

  2. java开发中获取路径的一些方式

    1.servlet开发获取WebContent(项目)的绝对路径: System.out.println(getServletContext().getRealPath("")); ...

  3. Android自学反思总结(下)

    后来陆陆续续过了大半个月,导员给找了一个Udacity在线学习的Android开发教程,只有一个月的免费学习机会,因此很快开始了叫Sunshine的天气应用的开发,教学视频整体是采用先自己思考并填写某 ...

  4. Java程序中与MongoDB建立连接~小记

    1.Mongo和MongoClient的关系 MongoClient继承自Mongo,使用Mongo也可建立连接,但是需要使用与Mongo适应的MongoOptions,MongoURI等类型. 2. ...

  5. 读书笔记 effective C++ Item 40 明智而谨慎的使用多继承

    1. 多继承的两个阵营 当我们谈论到多继承(MI)的时候,C++委员会被分为两个基本阵营.一个阵营相信如果单继承是好的C++性质,那么多继承肯定会更好.另外一个阵营则争辩道单继承诚然是好的,但多继承太 ...

  6. web console实现

    一.效果图 二.实现 web console是基于websocket实现的. 以上做的效果嵌入项目中,因为项目本身是angular1的项目,所以console整体封装成一个angualr  modul ...

  7. div背景图片或颜色不显示的解决办法

    背景图片不显示的原因: 1. css没有被调用 2. css图片地址不对 3. div的高度没有固定,是auto.没有设值或者高度不够 4. div被嵌套 5. div代码不规范 解决办法: (1)D ...

  8. lumen 中的 .env 配置文件简介和适用场景

    lumen 是 laravel 的衍生品,核心功能的使用和 laravel 都是一致的,但配置文件这一方面,lumen 在 laravel 的基础上增加了更简便的配置方式: lumen 采用了 Dot ...

  9. JDBC基础学习(四)—数据库事务

    一.事务基本认识 1.事务的概述      为了保证数据库中数据的一致性,数据的操作应当是离散的成组的逻辑单元.当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应当全部视 ...

  10. .Net Core MVC 过滤器(一)

    1.过滤器   过滤器运行在MVC Action Invocation Pipeline(MVC Action 请求管道),我们称它为Filter Pipleline(过滤器管道),Filter Pi ...