<tr id="tp1vn"><td id="tp1vn"><dl id="tp1vn"></dl></td></tr>
  1. <p id="tp1vn"></p>
  2. <sub id="tp1vn"><p id="tp1vn"></p></sub>
    <u id="tp1vn"><rp id="tp1vn"></rp></u>
    <meter id="tp1vn"></meter>
      <wbr id="tp1vn"><sup id="tp1vn"></sup></wbr>
      日韩第一页浮力,欧美a在线,中文字幕无码乱码人妻系列蜜桃 ,国产成人精品三级麻豆,国产男女爽爽爽免费视频,中文字幕国产精品av,两个人日本www免费版,国产v精品成人免费视频71pao
      網易首頁 > 網易號 > 正文 申請入駐

      2026-04-27:使子字符串變交替的最少刪除次數。用go語言,給定一個只含字符 A 和 B 的字符串 s,長度為 n。隨后會有若干操作查詢 queries

      0
      分享至

      2026-04-27:使子字符串變交替的最少刪除次數。用go語言,給定一個只含字符 A 和 B 的字符串 s,長度為 n。隨后會有若干操作查詢 queries,總數為 q。每條查詢可能是兩種形式之一:
      1.[1, j]:把字符串中位置 j 的字符翻轉(A ? B)。該操作會改變字符串 s,并影響后續所有查詢。
      2.[2, l, r]:在不修改字符串 s 的前提下,針對區間 [l, r] 的子串,求讓它變為“交替字符串”所需的最少刪除字符數。

      • ? “交替字符串”指子串中任意相鄰兩個字符都不相同。長度為 1 的子串天然滿足該條件。

      • ? 區間查詢不會改變整體字符串長度 n。

      請為所有類型 [2, l, r] 的查詢依次計算結果,并把這些結果按順序組成數組 answer 返回,其中 answer[i] 對應第 i 個區間查詢的最小刪除數。

      1 <= n == s.length <= 100000。

      s[i] 要么是 'A',要么是 'B'。

      1 <= q == queries.length <= 100000。

      queries[i].length == 2 或 3。

      queries[i] == [1, j] 或

      queries[i] == [2, l, r]。

      0 <= j <= n - 1。

      0 <= l <= r <= n - 1。

      輸入:s = "ABA", queries = [[2,1,2],[1,1],[2,0,2]]。

      輸出:[0,2]。

      解釋:

      i

      queries[i]

      j

      l

      r

      查詢前的 s

      s[l..r]

      結果

      答案

      0

      [2, 1, 2]

      1

      2

      "ABA"

      "BA"

      已經是交替字符串

      0

      1

      [1, 1]

      1

      "ABA"

      將 s[1] 從 'B' 反轉為 'A'

      2

      [2, 0, 2]

      0

      2

      "AAA"

      "AAA"

      刪除任意兩個 'A' 以得到 "A"

      2

      因此,答案是 [0, 2]。

      題目來自力扣3777。

      代碼執行過程詳細分步解析

      我們結合輸入示例s = "ABA"(長度n=3),queries = [[2,1,2],[1,1],[2,0,2]],分步驟拆解整個邏輯,全程不寫代碼,只講核心流程。

      前置知識鋪墊

      1. 1.交替字符串:相鄰字符不能相同,比如BA是交替,AAA不是;

      2. 2.核心規律:一個子串要變成交替字符串,最少刪除次數 = 子串中相鄰重復字符的總個數
        例:BA無相鄰重復,刪除數=0;AAA有2組相鄰重復(位置0-1、1-2),刪除數=2;

      3. 3.樹狀數組(Fenwick Tree):專門用來快速記錄、更新、查詢區間內相鄰重復字符的總數,支持O(logn)的單點修改和區間查詢。

      第一步:初始化數據結構
      1. 1. 確定字符串長度n=3,創建一個長度適配的樹狀數組,專門存儲相鄰重復字符的標記

      2. 2. 遍歷原字符串ABA,檢查每一組相鄰字符

      • ? 位置0和1:AB→ 不重復,不標記;

      • ? 位置1和2:BA→ 不重復,不標記;

      3. 最終樹狀數組中沒有任何標記值,代表原字符串沒有相鄰重復的字符。

      第二步:處理第一條查詢 [2, 1, 2](類型2:區間查詢)

      1. 1. 解析查詢:查詢子串區間[1,2](對應原字符串BA);

      2. 2. 核心邏輯:調用樹狀數組查詢這個區間內相鄰重復字符的總數

      3. 3. 結果:區間內沒有相鄰重復字符,總數=0;

      4. 4. 輸出:將0加入答案數組,此時答案數組為[0]

      第三步:處理第二條查詢 [1, 1](類型1:字符翻轉)
      1. 1. 解析查詢:翻轉字符串位置1的字符(原字符是B,翻轉后變成A);

      2. 2. 關鍵操作:翻轉字符會影響它左邊和右邊的相鄰關系,需要同步更新樹狀數組:

      • ? 位置1的左側是位置0(原字符A):翻轉后AA重復 → 給樹狀數組標記+1;

      • ? 位置1的右側是位置2(原字符A):翻轉后AA重復 → 給樹狀數組標記+1;

      3. 最終字符串變為AAA,樹狀數組記錄了2個相鄰重復標記

      4. 無輸出結果,僅修改字符串和樹狀數組。

      第四步:處理第三條查詢 [2, 0, 2](類型2:區間查詢)

      1. 1. 解析查詢:查詢子串區間[0,2](對應修改后的字符串AAA);

      2. 2. 核心邏輯:調用樹狀數組查詢這個區間內相鄰重復字符的總數

      3. 3. 結果:區間內有2組相鄰重復字符,總數=2;

      4. 4. 輸出:將2加入答案數組,最終答案數組為[0, 2]

      完整流程總結
      1. 1. 初始化:用樹狀數組記錄原字符串所有相鄰重復字符的位置;

      2. 2. 遍歷所有查詢:

      • ? 遇到類型2查詢:直接用樹狀數組查詢目標區間的相鄰重復總數,就是最少刪除數,加入答案;

      • ? 遇到類型1查詢:翻轉指定位置的字符,同時更新該字符左右兩側的相鄰關系(修改樹狀數組的標記);

      3. 所有查詢處理完畢,返回答案數組。

      時間復雜度與空間復雜度分析 1. 總時間復雜度

      • ? 樹狀數組的單點更新區間查詢操作,時間復雜度都是O(logn)

      • ? 初始化遍歷字符串:O(n);

      • ? 總共有 q 條查詢,每條查詢最多執行2次樹狀數組操作(類型1)或1次(類型2);

      • ? 總時間復雜度:O(n + q·logn)
        (完全適配題目中n和q最大1e5的要求,高效無超時)

      2. 總額外空間復雜度
      • ? 樹狀數組占用空間:O(n);

      • ? 存儲原字符串的字節數組:O(n);

      • ? 答案數組:最多O(q);

      • ? 總額外空間復雜度:O(n + q)
        (屬于線性空間,符合大數據量的內存要求)

      總結
      1. 1. 核心思路:最少刪除次數 = 子串內相鄰重復字符的個數

      2. 2. 核心工具:樹狀數組實現快速修改+快速查詢,適配1e5級別的大數據量;

      3. 3. 時間復雜度:O(n + q·logn),空間復雜度:O(n + q)。

      Go完整代碼如下:

      package main

      import (
      "fmt"
      )

      type fenwick []int

      func newFenwickTree(n int) fenwick {
      returnmake(fenwick, n+1) // 使用下標 1 到 n
      }

      // a[i] 增加 val
      // 1 <= i <= n
      // 時間復雜度 O(log n)
      func (f fenwick) update(i int, val int) {
      for ; i < len(f); i += i & -i {
      f[i] += val
      }
      }

      // 求前綴和 a[1] + ... + a[i]
      // 1 <= i <= n
      // 時間復雜度 O(log n)
      func (f fenwick) pre(i int) (res int) {
      for ; i > 0; i &= i - 1 {
      res += f[i]
      }
      return
      }

      // 求區間和 a[l] + ... + a[r]
      // 1 <= l <= r <= n
      // 時間復雜度 O(log n)
      func (f fenwick) query(l, r int) int {
      if r < l {
      return0
      }
      return f.pre(r) - f.pre(l-1)
      }

      func minDeletions(s string, queries [][]int) (ans []int) {
      n := len(s)
      t := newFenwickTree(n - 1)
      for i := 1; i < n; i++ {
      if s[i-1] == s[i] { // 刪除 i
      t.update(i, 1)
      }
      }

      bs := []byte(s)
      for _, q := range queries {
      if q[0] == 2 {
      ans = append(ans, t.query(q[1]+1, q[2]))
      continue
      }

      i := q[1]

      if i > 0 {
      val := 1
      if bs[i-1] == bs[i] {
      val = -1
      }
      t.update(i, val)
      }

      if i < n-1 {
      val := 1
      if bs[i] == bs[i+1] {
      val = -1
      }
      t.update(i+1, val)
      }

      bs[i] ^= 'A' ^ 'B'// A 變成 B,B 變成 A
      }
      return
      }

      func main() {
      s := "ABA"
      queries := [][]int{{2, 1, 2}, {1, 1}, {2, 0, 2}}
      result := minDeletions(s, queries)
      fmt.Println(result)
      }

      Python完整代碼如下:

      # -*-coding:utf-8-*-

      class Fenwick:
      def __init__(self, n: int):
      self.n = n
      self.bit = [0] * (n + 1) # 使用下標 1 到 n

      # a[i] 增加 val
      # 1 <= i <= n
      # 時間復雜度 O(log n)
      def update(self, i: int, val: int) -> None:
      while i < len(self.bit):
      self.bit[i] += val
      i += i & -i

      # 求前綴和 a[1] + ... + a[i]
      # 1 <= i <= n
      # 時間復雜度 O(log n)
      def pre(self, i: int) -> int:
      res = 0
      while i > 0:
      res += self.bit[i]
      i &= i - 1
      return res

      # 求區間和 a[l] + ... + a[r]
      # 1 <= l <= r <= n
      # 時間復雜度 O(log n)
      def query(self, l: int, r: int) -> int:
      if r < l:
      return0
      return self.pre(r) - self.pre(l - 1)

      def min_deletions(s: str, queries: list) -> list:
      n = len(s)
      tree = Fenwick(n - 1)

      # 初始化樹狀數組,標記需要刪除的位置
      for i in range(1, n):
      if s[i - 1] == s[i]: # 刪除 i
      tree.update(i, 1)

      bs = list(s)
      ans = []

      for q in queries:
      if q[0] == 2:
      # 區間查詢
      ans.append(tree.query(q[1] + 1, q[2]))
      continue

      # 更新操作 q[0] == 1
      i = q[1]

      if i > 0:
      val = 1
      if bs[i - 1] == bs[i]:
      val = -1
      tree.update(i, val)

      if i < n - 1:
      val = 1
      if bs[i] == bs[i + 1]:
      val = -1
      tree.update(i + 1, val)

      # 翻轉字符 A <-> B
      bs[i] = chr(ord('A') + ord('B') - ord(bs[i]))

      return ans

      def main():
      s = "ABA"
      queries = [[2, 1, 2], [1, 1], [2, 0, 2]]
      result = min_deletions(s, queries)
      print(result)

      if __name__ == "__main__":
      main()

      C++完整代碼如下:

        
      


      using namespace std;

      class Fenwick {
      private:
      vector bit;
      int n;

      public:
      Fenwick(int n) : n(n) {
      bit.resize(n + 1, 0); // 使用下標 1 到 n
      }

      // a[i] 增加 val
      // 1 <= i <= n
      // 時間復雜度 O(log n)
      void update(int i, int val) {
      for (; i < bit.size(); i += i & -i) {
      bit[i] += val;
      }
      }

      // 求前綴和 a[1] + ... + a[i]
      // 1 <= i <= n
      // 時間復雜度 O(log n)
      int pre(int i) {
      int res = 0;
      for (; i > 0; i &= i - 1) {
      res += bit[i];
      }
      return res;
      }

      // 求區間和 a[l] + ... + a[r]
      // 1 <= l <= r <= n
      // 時間復雜度 O(log n)
      int query(int l, int r) {
      if (r < l) {
      return0;
      }
      return pre(r) - pre(l - 1);
      }
      };

      vector minDeletions(string s, vector int >>& queries) {
      int n = s.size();
      Fenwick tree(n - 1 );

      // 初始化樹狀數組,標記需要刪除的位置
      for ( int i = 1 ; i < n; i++) {
      if (s[i - 1 ] == s[i]) { // 刪除 i
      tree.update(i, 1 );
      }
      }

      vector bs(s.begin(), s.end());
      vector< int > ans;

      for (auto& q : queries) {
      if (q[ 0 ] == 2 ) {
      // 區間查詢
      ans.push_back(tree.query(q[ 1 ] + 1 , q[ 2 ]));
      continue ;
      }

      // 更新操作 q[0] == 1
      int i = q[ 1 ];

      if (i > 0 ) {
      int val = 1 ;
      if (bs[i - 1 ] == bs[i]) {
      val = -1 ;
      }
      tree.update(i, val);
      }

      if (i < n - 1 ) {
      int val = 1 ;
      if (bs[i] == bs[i + 1 ]) {
      val = -1 ;
      }
      tree.update(i + 1 , val);
      }

      // 翻轉字符 A <-> B
      // 'A' ^ 'B' 在 C++ 中是 1,因為 'A' 是 65,'B' 是 66,異或結果為 1
      // 所以 bs[i] ^= 1 可以實現 A(65) 變成 B(66),B(66) 變成 A(65)
      bs[i] ^= 1 ;
      }

      return ans;
      }

      int main() {
      string s = "ABA" ;
      vector int >> queries = {{ 2 , 1 , 2 }, { 1 , 1 }, { 2 , 0 , 2 }};
      vector< int > result = minDeletions(s, queries);

      cout << "[" ;
      for (size_t i = 0 ; i < result.size(); i++) {
      if (i > 0 ) cout << " " ;
      cout << result[i];
      }
      cout << "]" << endl;

      return 0 ;
      }

      我們相信人工智能為普通人提供了一種“增強工具”,并致力于分享全方位的AI知識。在這里,您可以找到最新的AI科普文章、工具評測、提升效率的秘籍以及行業洞察。 歡迎關注“福大大架構師每日一題”,發消息可獲得面試資料,讓AI助力您的未來發展。

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      末輪翻盤!熱議U17國足神跡:終沒折在算術題上 日本教練原地下課

      末輪翻盤!熱議U17國足神跡:終沒折在算術題上 日本教練原地下課

      風過鄉
      2026-05-13 05:57:37
      江蘇1106萬退休人員養老金梯隊:月領8000元,到底屬于什么水平?

      江蘇1106萬退休人員養老金梯隊:月領8000元,到底屬于什么水平?

      三農老歷
      2026-05-13 17:07:22
      昆凌泰國錄制《中餐廳》,一身行頭近百萬,周杰倫也將驚喜加盟

      昆凌泰國錄制《中餐廳》,一身行頭近百萬,周杰倫也將驚喜加盟

      幽棠的趣式
      2026-05-13 06:51:02
      空砍24分!勒維爾:最重要的是下一場天王山 我們必須要守住

      空砍24分!勒維爾:最重要的是下一場天王山 我們必須要守住

      北青網-北京青年報
      2026-05-12 20:18:03
      關緊門窗!8-9級雷暴大風將至!湖北應急發布最新提醒

      關緊門窗!8-9級雷暴大風將至!湖北應急發布最新提醒

      極目新聞
      2026-05-13 15:23:07
      反轉?網紅白冰偷稅風波后首發聲,被前員工坑幾千萬,賬號已解封

      反轉?網紅白冰偷稅風波后首發聲,被前員工坑幾千萬,賬號已解封

      裕豐娛間說
      2026-05-13 15:54:17
      什么是CPO、OCS、PCB、CPC?概念股大全就在這里

      什么是CPO、OCS、PCB、CPC?概念股大全就在這里

      風風順
      2026-05-13 04:15:07
      大暴雨、特大暴雨!今明兩天,廣東或迎今年以來最強降雨過程

      大暴雨、特大暴雨!今明兩天,廣東或迎今年以來最強降雨過程

      極目新聞
      2026-05-13 15:57:55
      吃苯磺酸氨氯地平,最致命的副作用只有一個!想要保命,注意5點

      吃苯磺酸氨氯地平,最致命的副作用只有一個!想要保命,注意5點

      健康之光
      2026-05-13 09:41:24
      母親心梗ICU住28天花費30萬,人救回卻失能,后悔當初堅持搶救

      母親心梗ICU住28天花費30萬,人救回卻失能,后悔當初堅持搶救

      觀星賞月
      2026-05-13 11:19:38
      英國演員詹寧斯:阿隆索根本沒想去切爾西,只是在給紅軍施壓

      英國演員詹寧斯:阿隆索根本沒想去切爾西,只是在給紅軍施壓

      懂球帝
      2026-05-13 17:31:05
      導航怎么知道“紅綠燈變化的”?你以為是黑科技,其實原理很簡單

      導航怎么知道“紅綠燈變化的”?你以為是黑科技,其實原理很簡單

      Thurman在昆明
      2026-05-11 14:19:39
      《主角》口碑井噴,本是沖著張嘉益劉浩存來的,卻被48歲女配驚艷

      《主角》口碑井噴,本是沖著張嘉益劉浩存來的,卻被48歲女配驚艷

      冷紫葉
      2026-05-11 23:11:14
      婚姻糜爛的康有為:55歲娶17歲日本女傭,卻生下了自己的孫女

      婚姻糜爛的康有為:55歲娶17歲日本女傭,卻生下了自己的孫女

      墨策史
      2026-05-11 02:40:09
      劉嘉玲曬法國生活,梁朝偉在老婆鏡頭下撿雞蛋,兩口子生活好愜意

      劉嘉玲曬法國生活,梁朝偉在老婆鏡頭下撿雞蛋,兩口子生活好愜意

      喜歡歷史的阿繁
      2026-05-12 12:12:22
      5月13日調整后92,95號汽油、0號柴油價格,今天汽柴油又漲90元/噸

      5月13日調整后92,95號汽油、0號柴油價格,今天汽柴油又漲90元/噸

      豬友巴巴
      2026-05-13 09:19:59
      伊朗官員:若伊再次遭襲或將鈾濃縮豐度提升至90%

      伊朗官員:若伊再次遭襲或將鈾濃縮豐度提升至90%

      新華社
      2026-05-12 14:58:17
      張獻忠打重慶多慘烈?破城后屠盡官員、剮殺瑞王,三萬俘兵被斷掌

      張獻忠打重慶多慘烈?破城后屠盡官員、剮殺瑞王,三萬俘兵被斷掌

      鶴羽說個事
      2026-05-12 22:46:36
      小寶與王某雷,誰探訪花的數量更多?

      小寶與王某雷,誰探訪花的數量更多?

      挪威森林
      2026-01-31 12:15:26
      8年前擊敗北大碩士,拿下詩詞大會冠軍的外賣大叔,如今過得怎樣

      8年前擊敗北大碩士,拿下詩詞大會冠軍的外賣大叔,如今過得怎樣

      從零到一研究所
      2026-05-09 16:17:39
      2026-05-13 18:48:49
      moonfdd incentive-icons
      moonfdd
      福大大架構師每日一題
      1223文章數 68關注度
      往期回顧 全部

      科技要聞

      騰訊一季度營收1964.6億元 同比增9%

      頭條要聞

      俄軍:"世界上最強大導彈"試射成功 射程超35000公里

      頭條要聞

      俄軍:"世界上最強大導彈"試射成功 射程超35000公里

      體育要聞

      14年半,74萬,何冰嬌沒選那條更安穩的路

      娛樂要聞

      白鹿掉20萬粉,網友為李晨鳴不平

      財經要聞

      盤中最高4041.99點!創業板創歷史新高

      汽車要聞

      C級純電轎跑 吉利銀河"TT"申報圖來了

      態度原創

      手機
      數碼
      本地
      時尚
      公開課

      手機要聞

      OPPO新一代ColorOS 16正式版陸續開推,五月升級一覽發布

      數碼要聞

      洛圖科技:2026Q1中國筆記本電腦線上全渠道銷量同比下降19.2%

      本地新聞

      用蘇繡的方式,打開江西婺源

      老錢風失寵了?這個風格突然爆火,夏天穿太高級了!

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产av无码专区影视| 国产女做a精品视频免费| 在线国产极品尤物你懂的| 亚洲欧美日韩人成在线播放 | 3PAV乱伦视频| 精品亚洲人伦一区二区三区| 欧美伊人久久大香线蕉综合 | 亚洲无码免费观看| 柳江县| 精品人妻av综合一区二区| 伊人二区| 国产综合在线视频_亚洲日韩在线观| 欧美成年视频在线观看| 亚洲制服丝袜一区二区三区| 麻豆精品久久久久久久99蜜桃| 国产丰满乱子伦无码专区| 国产网红无码精品视频| 精品国产亚洲区久久露脸| 永久免费mv入口| 欧美?大陆?日韩?亚洲?夜夜夜夜?夜夜夜夜夜 | 丰满岳乱妇一区二区三区| 99久久99久久免费精品小说| 亚洲中文字幕乱码电影| 久久久老熟女一区二区三区| 亚洲日本韩国| 99热亚洲精品6码| 国产成人精品久久亚洲高清不卡| 久久亚洲精品成人综合网| 国产av制服丝袜| 激情欧美成人久久综合| 性色av一区二区三区人妻| 国内极度色诱视频网站| 中国久久中文| 亚洲成a人片在线观看导航| 国产美女mm131爽爽爽毛片| 99久久人妻精品免费二区| 欧美在线观看a| 一线二线三线天堂| 国产91精选在线观看| 国产精品亚洲mnbav网站| 午夜影视免费|