字符串看到 ”回文“ 尝试双指针

简介: 字符串看到 ”回文“ 尝试双指针

字符串看到 ”回文“ 尝试双指针


最近在看数据结构和算法,努力总结出道~

TL:DR

上一篇文说过有序的数组,试试用指针法遍历

指针的本质是,记住遍历的进度,从而减少无效遍历的范围。

同理,对于字符串来说,如果是回文,有着天然的对称性,非常适合用指针法缩小遍历范围。

什么是回文

回文:正着读和倒着读都一模一样的字符串。

特点:对称!对称!对称!

判断是不是回文的快速 api 方法:str=>str.split('').reverse().join() === str

非 Api 的朴素方法:左右两个指针,只要相等就往中间移动,遍历完则是回文,否则就不是回文

function isPalindrome(str) {
  let len = str.length;
  let L = 0;
  let R = len - 1;
  // 指针法基本都是while,遍历的条件是左指针始终在左边
  while (L < R) {
    if (str[L] !== str[R]) {
      return false;
    }
    L++;
    R--;
  }
  return true;
}

练习:回文类的字符串题目

网络异常,图片无法展示
|

当然如果不知道对称性的情况,可能会暴力的从第一个字符串开始试着删除,然后判断剩下的是不是回文,方法肯定可行,但没有利用好对称性。

其实这里,和判断是不是回文类似,左右双指针,当不相等的时候,尝试对左指针字符和右指针字符尝试进行“跳过”,看看区间在 [L+1, R] 或 [L, R-1] 的字符串是否回文。

function validPalindrome(str) {
  const len = str.length;
  let L = 0;
  let R = len - 1;
  // 循环条件加个相等,这样循环后面就是不相等的位置
  while (L < R && str[L] === str[R]) {
    L++;
    R--;
  }
  // 判断特定区间是不是回文
  if (isPalindrome(L + 1, R) || isPalindrome(L, R - 1)) {
    return true;
  }
  return false;
  // 方法稍微改成特定区间
  function isPalindrome(L, R) {
    while (L < R) {
      if (str[L] !== str[R]) {
        return false;
      }
      L++;
      R--;
    }
    return true;
  }
}

可以看下官方视频

引用

目录
相关文章
C4.
|
6月前
|
存储 程序员 C语言
C语言中如何通过指针引用字符串
C语言中如何通过指针引用字符串
C4.
67 0
|
6月前
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
48 0
|
6月前
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
37 0
|
6月前
【每日一题Day117】LC1234替换子串得到平衡字符串 | 双指针
【每日一题Day117】LC1234替换子串得到平衡字符串 | 双指针
44 0
|
6月前
|
算法 C语言
通过指针引用字符串
通过指针引用字符串
62 1
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
6月前
|
存储 C++
C++程序中的字符串与指针
C++程序中的字符串与指针
61 2
|
6月前
|
C语言
C语言指针与字符串
C语言指针与字符串
36 0
|
C语言
C语言之字符串的连接使用指针和调用函数两种方法
C语言之字符串的连接使用指针和调用函数两种方法
263 0
|
6月前
|
安全 C语言
指针与字符串:C语言中的深入探索
指针与字符串:C语言中的深入探索
109 0