leetcode

LeetCode:Valid Anagram

a 夏天 提交于 2019-12-15 20:25:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、题目名称 Valid Anagram (易位构词) 2、题目地址 https://leetcode.com/problems/valid-anagram/ 3、题目内容 英文:Given two strings s and t, write a function to determine if t is an anagram of s. 中文:给出两个字符串,写一个函数判断t是否是s的易位构词 例如: s = "anagram", t = "nagaram", return true. s = "rat", t = "car", return false. 4、题目分析 易位构词游戏的规则可以参考相关的 维基百科页面 :易位构词是一类文字游戏。它的规则是将组成一个词或短句的字母重新排列顺序,原文中所有字母的每次出现都被使用一次,这样构造出另外一些新的词或短句。现在我们要判断的就是给出两个字符串s和t,判断字符串t能否由s通过易位构词产生。 5、一个超时的方法 在做这个题的时候我第一个想到的方法就是,将s和t两个字符串先转换成数组,然后分别对两个数组进行排序,再对两个排序后的数组进行逐位比较。如果发现两个数组中不一致的地方,则返回false,否则返回true。对应的Java代码如下: /** * 功能说明

Valid Anagram from LeetCode

不想你离开。 提交于 2019-12-15 20:17:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Given two strings s and t , write a function to determine if t is an anagram of s . For example, s = "anagram", t = "nagaram", return true. s = "rat", t = "car", return false. Note: You may assume the string contains only lowercase alphabets. 题目比较直观,只需要检查两个字符串中,相同字符是否出现了同样的次数,并且没有多余的字符,即可; public class Solution { public boolean isAnagram(String s, String t) { int[] map = new int[26]; char[] cs = s.toCharArray(); for(char c : cs) { int x = c - 'a'; map[x] += 1; } cs = t.toCharArray(); for(char c : cs) { int x = c - 'a'; if(map[x] == 0) { return false; } map[x

LeetCode 568. Maximum Vacation Days

有些话、适合烂在心里 提交于 2019-12-15 11:03:25
原题链接在这里: https://leetcode.com/problems/maximum-vacation-days/ 题目: LeetCode wants to give one of its best employees the option to travel among N cities to collect algorithm problems. But all work and no play makes Jack a dull boy, you could take vacations in some particular cities and weeks. Your job is to schedule the traveling to maximize the number of vacation days you could take, but there are certain rules and restrictions you need to follow. Rules and restrictions: You can only travel among N cities, represented by indexes from 0 to N-1. Initially, you are in the city indexed 0 on Monday.

认证授权那点事儿 —— OAuth 2.0

余生长醉 提交于 2019-12-15 09:44:29
OAuth 2.0 —— 开放授权协议,对应的规范文件 RFC-6749 早在2012年便成形,所以这并不是一个新的技术(你问我为啥研究这个,我也想吟一首诗啊。。。组织上就是这样决定的),但由于其必不可少的价值,在今天的网络上已经得到了广泛的应用。 OAuth2.0认证是要在不同的应用之间打通互信,互信的目的是为了实现一定程度上的用户数据分享,没数据的一方到有数据的一方拿数据,并且在时间尺度上,数据的分享是受控的。 比如你在微信上打开小程序,小程序会向微信索要你的基本信息;比如你用马克飞象作为印象笔记的客户端,马克飞象会向印象笔记索要你的账户信息,以及阅读、创建、删除、修改笔记等的权限;比如你用github账号登录leetcode,后者会去前者索要你的账户信息 …… 在这些场景里都涉及三方:用户、没数据的应用、有数据的应用(授权、资源)。OAuth2.0规范就规定了三方如何交互,完成权限的授予,获取数据的过程。整体逻辑过程如下图 整个授权框架中包含了4种授权模式: 授权码模式 隐式许可模式 密码模式 客户端模式 在详述4种模式之前,首先需要注意,第三方应用需要先到资源持有应用处注册身份,提交回调URI,注册成功后,得到标识身份的 Client ID 和 Client Secret。资源持有者也可以趁这个阶段对第三方应用进行安全审核。 Client Type ,

leetcode 139.单词拆分 golang实现

旧巷老猫 提交于 2019-12-15 01:12:39
描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。 示例 2: 输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。 注意你可以重复使用字典中的单词。 示例 3: 输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false 思路 动态规划 1. 找公式 dp[i] 表示字符串i 是否满足拆分条件 如果可以拆分 即dp[i] = true 则拆分为两个字符串 s[0:j] s[j:i] 很明显s[0:j] 也需要可以拆分 即满足dp[j] = true s[j:i]是字典里的单词即可 公式即为 dp[i] = dp[j] && s

LeetCode:Palindrome Linked List

狂风中的少年 提交于 2019-12-14 23:24:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、题目名称 Palindrome Linked List(回文链表) 2、题目地址 https://leetcode.com/problems/palindrome-linked-list/ 3、题目内容 英文:Given a singly linked list, determine if it is a palindrome. 中文:给出一个链表,确定该链表是否为回文链表,即前后对称的链表 4、解题方法1 第一种方式是创建一个逆序的链表,然后分别从前向后遍历正序和逆序两个链表,逐个节点进行比较。 Java代码如下: /** * @功能说明:LeetCode 234 - Palindrome Linked List * @开发人员:Tsybius2014 * @开发时间:2015年12月18日 */ public class Solution { /** * 测试链表是否为回文链表 * @param head 链表首节点 * @return */ public boolean isPalindrome(ListNode head) { //创建一个逆序的链表 ListNode node = head; ListNode tail = null; while (node != null) { ListNode

leetcode-8

ⅰ亾dé卋堺 提交于 2019-12-14 04:56:45
请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0。 说明: 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。 示例 1: 输入: "42" 输出: 42 示例 2: 输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它是一个负号。 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。 示例 3: 输入: "4193 with words" 输出: 4193 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。 示例 4: 输入

LeetCode—— 1189 “气球”的最大数量

我是研究僧i 提交于 2019-12-14 03:25:21
问题描述 给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。 字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。 示例 1: 输入:text = "nlaebolko" 输出:1 示例 2: 输入:text = "loonbalxballpoon" 输出:2 示例 3: 输入:text = "leetcode" 输出:0 提示: 1 <= text.length <= 10^4 text 全部由小写英文字母组成 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-number-of-balloons 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 执行结果 代码描述 思路:开辟一个26位的数组,下标表示字符,值表示个数。根据单词的需要,直接选取最小个数,即为单词的个数。 class Solution { public: int maxNumberOfBalloons(string text) { int arr[26] = {0}; for(int i = 0; i < text.size(); ++i) { arr[text[i]-'a']++; } int count = 0; /

Longest Valid Parentheses leetcode java (求最长有效匹配括号子串的长度)-动态规划

放肆的年华 提交于 2019-12-13 02:07:59
LeetCode : Longest Valid Parentheses leetcode java (求最长有效匹配括号子串的长度) 使用动态规划 算法 通过使用动态 规划 可以解决此问题。我们利用{dp}dp数组,其中 {dp}dp表示最长有效子串的长度,结尾为一世 我的 索引。我们初始化完成\ {dp}dp数组为0。现在,很明显,有效的子字符串必须以结尾 ') '。这进一步得出结论,子字符串以\文本'(' 始终在其对应的位置包含'0' {dp}dp索引。因此,我们更新了 {dp}dp数组仅当 ')' 遇到')'。 This problem can be solved by using Dynamic Programming. We make use of a \text{dp}dp array where iith element of \text{dp}dp represents the length of the longest valid substring ending at iith index. We initialize the complete \text{dp}dp array with 0's. Now, it's obvious that the valid substrings must end with \text{‘)’}‘)’. This

[leetcode] Add Two Numbers

我是研究僧i 提交于 2019-12-11 16:08:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 https://oj.leetcode.com/problems/add-two-numbers/ 思路:模拟题,从头向后依次遍历两个链表相加。 注意:1. 用dummy head简便处理。2. 注意carry的处理,尤其最高位进位的情况。3. 注意引用null的判断。 public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { // printList(l1); // printList(l2); ListNode p = new ListNode(-1); ListNode head