算法题训练

Posted by Asser's Blog on August 18, 2019

2019-08-18

题目描述:

给定一个字符串,找出不含有重复字符的最长子串的长度

自己的解答:

    function findString(string) {
    	let  result = ''
    	let  current = ''
    	let  strs = string.split('')
    	const  isDuplicate = (newStr) => {
    		if ( current.indexOf(newStr) !== -1) {
    			return true
    		}
    		return false
    	}
    	for (let i = 0, len = strs.length; i < len; i++) {
    		if (isDuplicate(strs[i])) {
    			if (current.length > result.length) {
    				result = current
    			}
    			current = strs[i]
    		} else {
    			current += strs[i]
    		}
    	}
    	if (current.length > result.length) {
    		result = current
    	}
    	return result
    }

2019-08-26

题目描述

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

Attention

examples

输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

自己的解答:

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var mergeTwoLists = function(l1, l2) {
    if (!l1 || !l2) {
        return l1 || l2
    }
    if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2)
        return l1
    } else {
        l2.next = mergeTwoLists(l1, l2.next)
        return l2
    }
};

2019-08-27

题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

Attention

examples

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 #### 自己的解答 ````javascript /**  * @param {number[]} nums  * @return {number}  */ var maxSubArray = function(nums) {
let max = nums[0]
let sum = 0
nums.forEach(num => {
    if (sum > 0) {
        sum += num
    } else {
        sum = num
    }
    max = Math.max(sum, max)
})
return max }; ````     ### 2019-08-29 #### 题目描述 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。 #### Attention 一个单词是指由字母组成,但不包含任何空格的字符串。 #### examples
输入: "Hello World"
输出: 5 #### 自己的解答 ````javascript /**  * @param {string} s  * @return {number}  */ var lengthOfLastWord = function(s) {
const trim = s => {
    let reg = new RegExp(/^\s*|\s*$/, 'g')
    return s.replace(reg, '')
}
let words = trim(s).split(' ')
let lastW = words.pop()
if (lastW === ' ') return 0
return lastW.length }; ````