日韩性视频-久久久蜜桃-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 | 欧美色女人 | 欧美成人一二三 | 欧美人与动牲交a欧美精品 欧美三级在线看 | 日韩最新视频 | 91蜜桃传媒精品久久久一区二区 | 午夜精品一区二区三区三上悠亚 | 玉足女爽爽91| 欧亚av | 亚洲免费片 | 在线播放精品 | 国产成人精品亚洲精品色欲 | 久草免费资源站 | mm131在线 | 成人免费观看视频网站 | 国产成人精品视频一区二区 | 日本美女久久久 | 欧美一区二区福利 | 亚洲国产精品天堂 | 一区二区三区在线观看免费 | 亚洲精品电影网 | 久久性色av| 2017日日夜夜 | 中文字幕第8页 | 无码人妻一区二区三区av | 91久久久久久久 | 亚洲第一成肉网 | 在线观看三级视频 | 天天曰天天 | 激情婷婷在线 | www欧美日韩| 五月激情小说网 | 国产精品黄色 | 91在线看黄 | 欧美涩涩涩 | 六月综合激情 | 加勒比av在线播放 | 国产日韩视频一区 | 国产精品一区二区自拍 | 91高清在线视频 | 五月天综合 | 97精品国产97久久久久久春色 | 一区二区欧美日韩 | 在线观看亚洲精品视频 | 日韩精品一区二区亚洲av性色 | 2018国产大陆天天弄 | 中文字幕无码乱人伦 | 国产精品日本一区二区在线播放 | 台湾性生生活1 | 91l九色lporny| 国产精品天堂 | 色天堂视频 | 亚洲一区免费看 | 91视频久久久 | 国产精品欧美久久久久天天影视 | 怎么可能高潮了就结束漫画 | 精品国产av色一区二区深夜久久 | 欧美日b片| 自拍视频国产 | 国产黄在线播放 | 蘑菇福利视频一区播放 | 精品人妻一区二区三区视频 | 久久91| 男人喷出精子视频 | 一个色在线视频 | 黄色片视频免费在线观看 | 最新av免费观看 | 用力使劲高潮了888av | 成人黄色大片 | 男女乱淫视频 | 乱子伦视频在线看 | 免费观看av网站 | 你懂得在线视频 | 日av中文字幕| 少妇高潮一区二区三区99刮毛 | 亚洲人人插 | 2019自拍偷拍 | 一级黄色性片 | 99久久99久久免费精品蜜臀 | 性开放网站 | 寡妇激情做爰呻吟 | 国产人妖一区二区 | 亚洲精品大片 | 丝袜视频在线观看 | 福利一区二区 | 久久不射网站 | 性猛交富婆╳xxx乱大交麻豆 | 超清av在线 | 免费涩涩| 久久久久久久久久91 | 成人午夜看片 | 粉嫩aⅴ一区二区三区 | 亚洲国产情侣 |