练习1: 编写一个函数来查找字符串数组中的最长公共前缀。
思路:
1.取第一个数组的第一个元素与后面的元素作比较,找出公共的前缀
2.将该前缀作为第一个元素,继续与后面的元素作比较,找出公共的前缀
遍历字符串,找出相同的前缀
代码:
    var longestCommonPrefix = function(strs) {
        // 判断字符串是否为空
        if(strs == null || strs.length===0){
            return “”
        }
        let result = strs[0];
        // 从数组的二个元素开始遍历
        for(let i = 1;i < strs.length;i++){
            let len = Math.min(result.length, strs[i].length);
        let index = 0;
        while(index < len && result.charAt(index) == strs[i].charAt(index)){
          index++;
        }
        if(index == 0){
          return “”
        }
        result = result.substr(0,index);
      }
      return result;
    };
练习2: 编写一个函数来查找字符串数组中的最长公共前缀。
解题思路:使用栈和遍历
栈:后进先出
示例代码:
//  有效的括号:括号要左右配对顺序相同,相当于栈
// 字符串长度必须是偶数
//  1.遍历字符串
//  2.遇到左括号依次入栈,根据先进后出,栈顶即为最里面的左括号
//  3.遇到右括号,判断此时栈顶元素是否和Map里右括号对应的值相同,且栈不为空
//  4.若栈顶元素与右括号对应的值不匹配,则返回false
//  5.否则出栈
//  6.最后若栈为空,则是有效字符串,返回true
    var isValid = function(s) {
        const len = s.length;
        if(len % 2 !=0){
            return false;
        }
        const pairs =new Map([
            [‘)’,’(‘],
            [‘}’,’{‘],
            [‘]’,’[‘],
        ])
        let stk = [];
        for(let ch of s){
            if(pairs.has(ch)){
                if(!stk.length || stk[stk.length-1] != pairs.get(ch)){
                    return false;
                }
                stk.pop();
            }else{
                stk.push(ch);
            }
        }
        return !stk.length;
    };
练习3:删除有序数组中的重复项。
解题思路:
1.使用双指针法的快慢指针,定义slow和fast做为指针。
2.初始化指针slow指向数组的起始位置(nums[0]),指针fast指向指针slow的后一个位置(nums[1])。
3.指针fast不断向后移动,将指针fast指向的元素与指针slow指向的元素进行比较。
代码:
    var removeDuplicates = function(nums) {
        if(nums.length == 0){
            return 0;
        }
        // 初始化时指针slow指向数组的起始位置(nums[0]),指针fast指向指针slow的后一个位置(nums[1])。
        let slow = 0,fast = 1;
            while(fast<nums.length){
                if(nums[fast]!=nums[slow]){
                    slow = slow + 1;
                    nums[slow] = nums[slow];
                }
                fast = fast + 1;
            }
            return slow + 1;
    };
练习4:移除元素。
解题思路:
1.使用双指针法的快慢指针,定义slow和fast做为指针。
2.快指针:寻找新数组元素,新数组就是不含有目标元素的数组
  慢指针:指向更新新数组下标的位置
代码:
    var removeElement = function(nums, val) {
        if(nums.length == 0){
            return 0;
        }
        var slow = 0;
        var fast;
        for(fast = 0;fast<nums.length; fast++){
            if(nums[fast] == val){
                continue;
            }else{
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    };
练习4:搜索插入位置。
解题思路:
1.利用二分法查找左边边界。
代码:
    var searchInsert = function(nums, target) {
        let left = 0;
        right = nums.length - 1;
        ans = nums.length;
        while(left<=right){
            let mid = parseInt((right + left)/2);
            if(target <= nums[mid]){
                ans = mid;
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        return ans;
};