日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )

發布時間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、雙指針算法分類
  • 二、相向雙指針示例 ( 有效回文串 )





一、雙指針算法分類



面試時經常遇到 限制算法復雜度為 O(n)O ( n )O(n) 的情況 , 就需要使用以下算法 :

  • 雙指針算法 : 設置兩個指針 ( 索引 ) , 進行不同方式的遍歷 , 使用最高頻的算法 ;
  • 打擂臺算法 : 設置一個擂主值 , 設置為無窮大或無窮小 , 通過遍歷讓該擂主值與遍歷值打擂臺 ; 求最大值最小值常用 ;
  • 單調棧算法 ;
  • 單調隊列算法 ;

雙指針算法分類 :

  • 相向雙指針 : 判斷一個字符串是否是回文串 , 從兩邊向中心遍歷 ;
  • 背向雙指針 : 查找一個字符串的最長回文子串使用的 " 中心線枚舉算法 " 就是背向雙指針算法 , 從中心向兩邊遍歷 ; ( 出現頻率較 - 低 )
  • 同向雙指針 :

相向雙指針算法分類 :

  • 翻轉類型 : ① 翻轉字符串 , ② 判斷回文串 ; 兩個指針分別指向收尾 , 兩邊往中間走 , 對比兩個指向的元素是否相等 ;
  • 兩數之和型 : ① 兩數之和 , ② 三數之和 ;
  • 分割類型 : ① 快速排序 , ② 顏色排序 ; 給定一個數組 , 將其分割成兩部分 , 一部分滿足某條件 , 另外一部分不滿足某條件 ;




二、相向雙指針示例 ( 有效回文串 )



有效回文串 : https://www.lintcode.com/problem/415/


如果是不忽略大小寫 , 特殊字符的情況 , 可以直接 翻轉字符串 , 然后對比是否相等 ;
但是如果添加了上述要求 , 就需要處理大小寫 , 特殊字符問題 , 有兩種方案 :

  • 創建新字符串 , 過濾掉大小寫及特殊字符干擾, 然后翻轉字符對比 , 這樣會增加額外空間開銷 ;
  • 推薦使用雙指針算法 , 一邊進行過濾 , 一邊進行對比 ;

設計兩個指針 , 分別指向字符串的最左側 和 最右側 ;

每次遍歷 , 都要進行 兩個指針的下標判斷 , 否則就會導致下標訪問越界 ;


代碼示例 :

public class Solution {/*** @param s: 一個字符串* @return: 該字符串是否有有效回文串*/public boolean isPalindrome(String s) {if (s == null) {return false;}// 雙指針int left = 0, right = s.length() - 1;while (left < right) {// 左指針向右移動, 一直移動, 直到遇到一個合法的字符, 即字母或數字while (left < right && !isValid(s.charAt(left))) {left ++;}// 右指針向左移動, 一直移動, 直到遇到一個合法的字符, 即字母或數字while (left < right && !isValid(s.charAt(right))) {right --;}// 對比兩個指針指向的字符, 如果不相等, 則說明該字符串不是有效回文串if (left < right && !isEqual(s.charAt(left), s.charAt(right))) {return false;}// 兩指針相向移動left++;right--;}return true;}/*** 判定字符串是否是字母或數字* @param c 被判定的字符串* @return 是否是字母或數字*/private boolean isValid(char c) {return Character.isLetter(c) || Character.isDigit(c);}/*** 對比兩個字符是否相等, 忽略大小寫, 先將字符轉為小寫字母, 然后再對比* @param a 對比的字符一* @param b 對比的字符二* @return 字符轉為小寫字母后, 是否相等*/private boolean isEqual(char a, char b) {return Character.toLowerCase(a) == Character.toLowerCase(b);} }class Main{public static void main(String[] args) {boolean isPalindrome = new Solution().isPalindrome("A man, a plan, a canal: Panama");System.out.println(isPalindrome);} }

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 污视频网站免费看 | 久久精品免费一区二区 | 蜜臀av一区| 成人免费超碰 | 男女一区二区三区 | 婷婷激情综合网 | аⅴ资源中文在线天堂 | 久久久噜噜噜久久 | 国产男同gay网站 | 91精品综合久久 | 国产一级一片免费播放放a 丁香六月色 | 插入综合网 | 一区二区视频国产 | 国产一区精品在线观看 | 亚洲精品视频一区二区 | 五月少妇 | 精品久久久蜜桃 | 91xxx在线观看 | 97精品人妻一区二区三区香蕉 | 激情六月天婷婷 | 亚洲第一大网站 | 精品人妻伦一二三区久久 | 九九热视频在线 | 少妇在线观看 | 色网站视频 | 亚洲国产激情 | 亚洲av无码乱码国产精品 | 干综合网| 日日夜夜爱爱 | 久久青青热| 日本a级c片免费看三区 | 国产成人无遮挡在线视频 | 午夜精品一区二区三区在线 | 天天操网站 | 18av在线播放 | 亚洲午夜福利在线观看 | 噜噜噜久久,亚洲精品国产品 | 国产福利91精品一区二区三区 | 久视频在线观看 | 亚洲国产麻豆 | 亚洲av片一区二区三区 | 成人激情开心 | 午夜影院a| 日本亚洲一区 | 久操网站| 国产尤物av尤物在线看 | 亚洲色图图片区 | 91亚洲欧美激情 | 久操视频免费看 | 亚洲欧美激情精品一区二区 | 中国一级黄色 | 日批免费在线观看 | 国产资源在线视频 | 亚洲第一av网站 | 快色在线 | 樱花草涩涩www在线播放 | 国产精品久久久久久久久久久久久久久 | √资源天堂中文在线视频 | 日韩成人黄色片 | 亚州av | 诱夫1v1高h| 国产精品免费一区二区三区 | 天天干干干| 午夜福利视频 | 妖精视频在线观看免费 | 色视频一区二区 | 久久久久18| 国产人妻久久精品一区二区三区 | 成人免费视频网站在线观看 | xxxxhd欧美 | 黄色一级免费看 | 国产亚洲欧美在线视频 | 男生尿隔着内裤呲出来视频 | 亚洲成人a√ | 99国产精品久久 | 激情网站免费 | 亚洲自拍偷拍一区 | 亚洲一级一区 | 国产性一乱一性一伧一色 | 亚洲精品免费在线播放 | 三叶草欧洲码在线 | 日本成人一二三区 | 丝袜 中出 制服 人妻 美腿 | 欧美中文字幕在线观看 | 亚洲一区二区欧美 | 日韩精品 欧美 | 婷婷在线免费 | 在线免费精品视频 | 免费在线观看的黄色网址 | 欧美在线观看视频一区 | 黄频在线免费观看 | 高h全肉污文play带道具 | 吞精囗交69激情欧美 | 日本a级无毛| 朝鲜女人性猛交 | 国产色网| 日韩网 | 国产欧美亚洲一区 | 深夜视频在线观看免费 |