1. 验证回文字符串 Ⅱ(680)

地址:https://leetcode-cn.com/problems/valid-palindrome-ii/

双指针,如果两头的字符相等,则向中间夹,直到不等。看看区间在 [left+1, right] 或 [left, right-1] 的字符串是否回文;

  1. var validPalindrome = function(s) {
  2. const len = s.length
  3. let i = 0,j=len-1
  4. // 当左右指针均满足对称时,一起向中间前进
  5. while(i<j && s[i] === s[j]){
  6. i++
  7. j--
  8. }
  9. // 尝试判断跳过左指针元素后字符串是否回文
  10. if(validate(i+1,j)){
  11. return true
  12. }
  13. // 尝试判断跳过右指针元素后字符串是否回文
  14. if(validate(i,j-1)){
  15. return true
  16. }
  17. // 用于判断字符串是否回文
  18. function validate(st,end){
  19. while(st < end){
  20. if(s[st] !== s[end]){
  21. return false
  22. }
  23. st++;
  24. end--
  25. }
  26. return true
  27. }
  28. return false
  29. };

2. 添加与搜索单词 - 数据结构设计(211)

地址:https://leetcode-cn.com/problems/design-add-and-search-words-data-structure/

使用一个对象存储添加的数据,如果搜索的字符串不带“.”则是正常的字符,直接搜索即可,否则正则匹配一下。

  1. var WordDictionary = function() {
  2. this.words = {}
  3. };
  4. /**
  5. * @param {string} word
  6. * @return {void}
  7. */
  8. WordDictionary.prototype.addWord = function(word) {
  9. if(this.words[word.length]){
  10. this.words[word.length].push(word)
  11. }else{
  12. this.words[word.length] = [word]
  13. }
  14. };
  15. /**
  16. * @param {string} word
  17. * @return {boolean}
  18. */
  19. WordDictionary.prototype.search = function(word) {
  20. if (!this.words[word.length]) {
  21. return false
  22. }
  23. const len = word.length
  24. if (!word.includes('.')) {
  25. return this.words[len].includes(word)
  26. }
  27. const reg = new RegExp(word)
  28. return this.words[len].some((item) => {
  29. return reg.test(item)
  30. })
  31. };

3. 字符串转换整数 (atoi)(8)

地址:https://leetcode-cn.com/problems/string-to-integer-atoi/

不高频可以试着做