1. 给定一个罗马数字,将其转换成整数。
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符          数值
 I             1
 V             5
 X             10
 L             50
 C             100
 D             500
 M             1000
 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
输入: s = "III"  输出: 3
输入: s = "IV"  输出: 4
输入: s = "IX" 输出: 9
var romanToInt = function(s) {
    let m=new Map([['I',1],['V',5],['X',10],['L',50],['C',100],['D',500],['M',1000]]);
    let res=0;
    for(let i=0;i<s.length;i++) {
        let left=m.get(s[i]);
        let right=m.get(s[i+1]);
        res+=left<right?-left:left;
        // 题意就是:当左侧小于右侧 右侧-左侧;当左侧大于右侧 左侧+右侧
    }
    return res;
};
2. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。数组中同一个元素在答案里不能重复出现。
输入:nums = [2,7,11,15], target = 9
 输出:[0,1]
 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
var twoSum = function(nums, target) {
    if (nums.length > 0) {
      let o = nums[0];
      let t = nums[0];
      for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
          if (nums[i] + nums[j] === target) {
            o = i;
            t = j;
          }
        }
      }
      return [o, t]
    } else {
      return [-1, -1]
    }
}
3.给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
这个题官方解答用了“滑动窗口”,后面要再仔细看一下。
输入: s = "abcabcbb"
 输出: 3 
 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
var lengthOfLongestSubstring = function (s) {
  if (s.length === 0 || s.length === 1) {
    return s.length;
  } else {
    let s1 = '';
    let a = [];
    for (let i = 0; i < s.length; i++) {
      if (s1.includes(s.charAt(i)) === true) {
        s1 += s.charAt(i)
        // console.log(a, a.length);
        // console.log(s1.length, i);
        i = i - s1.length + 1
        // console.log(i);
        s1 = '';
        // console.log(i);
      } else {
        s1 += s.charAt(i);
      }
      a.push(s1.length)
    }
    console.log(a);
    let m = a[0];
    for (let i = 0; i < a.length; i++) {
      if (m < a[i]) {
        m = a[i]
      }
    }
    return m;
  }
};
每一次要将存储最长子串的变量s1置空的时候,将该子串的长度存入数组a中、同时要注意将i退回(i-s1.length+1),最后找出数组a中最大元素,即最长子串的长度。
以下是其他人的解答,感觉更简单易懂:
var lengthOfLongestSubstring = function(str) {
    if (str.length <= 1) {return str.length}
      let left = 0
      let right = 1
      let max = 0
      let temp
      while(right<str.length){
        temp = str.slice(left, right)
        if (temp.indexOf(str.charAt(right)) > -1) {
          left++
          continue
        } else {
          right++
        }
        if (right - left > max) { max = right - left }
      }
      return max
};
// 作者:Romantic Ardinghellix4s
// 链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/
// 来源:力扣(LeetCode)