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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

子串字谜substring anagrams

發(fā)布時(shí)間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 子串字谜substring anagrams 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[抄題]:

給定一個(gè)字符串?s?和一個(gè)?非空字符串?p?,找到在?s?中所有關(guān)于?p?的字謎的起始索引。
字符串僅由小寫英文字母組成,字符串?s?和?p?的長度不得大于 40,000。
輸出順序無關(guān)緊要.

樣例

給出字符串 s =?"cbaebabacd"?p =?"abc"
返回?[0, 6]

子串起始索引 index = 0 是 "cba",是"abc"的字謎. 子串起始索引 index = 6 是 "bac",是"abc"的字謎.

?[暴力解法]:

時(shí)間分析:

空間分析:

[思維問題]:

[一句話思路]:

先初始化,再統(tǒng)計(jì)p位之后的絕對(duì)值之和。

[輸入量]:空:?正常情況:特大:特小:程序里處理到的特殊情況:異常情況(不合法不合理的輸入):

[畫圖]:

sliding window的原理是數(shù)數(shù)字,向右滑動(dòng)時(shí),count(r)++,count(l)--

[一刷]:

  • 字符串處理一個(gè)個(gè)的字母時(shí),要用.tochararray先把字符串轉(zhuǎn)成數(shù)組
  • det也是數(shù)組,absSum是其的絕對(duì)值求和
  • det 有幾個(gè)元素算幾個(gè),用for (int item : det)簡寫
  • s.toCharArray();表示對(duì)方法的調(diào)用
  • list一定要用linkedlist or arraylist來實(shí)現(xiàn),不能直接復(fù)制粘貼
  • [二刷]:

  • 特殊判斷必須要寫
  • 搞清楚det的含義 = sc - pc pc增加,det = r - l r增加
  • 在之后的數(shù)組中,都是計(jì)算cntS[] 數(shù)組的數(shù)量
  • absSum要用Math.abs
  • [三刷]:

    [四刷]:

    [五刷]:

    ? [五分鐘肉眼debug的結(jié)果]:

    [總結(jié)]:

    根據(jù)表格進(jìn)行聯(lián)想

    [復(fù)雜度]:Time complexity: O(n) Space complexity: O(n)

    [英文數(shù)據(jù)結(jié)構(gòu)或算法,為什么不用別的數(shù)據(jù)結(jié)構(gòu)或算法]:

    [其他解法]:

    [Follow Up]:

    [LC給出的題目變變變]:

    242.?Valid Anagram 用deta求absSum

    567.?Permutation in String 兩根指針?不懂

    ?[代碼風(fēng)格] :

  • cntS 才符合駱駝命名法
  • public class Solution {/*** @param s: a string* @param p: a string* @return: a list of index*/public List<Integer> findAnagrams(String s, String p) {//initializationList<Integer> ans = new LinkedList<>();//corner caseif (s.length() < p.length()) {return ans;}char[] sc = s.toCharArray();char[] pc = p.toCharArray();int[] cntS = new int[256];int[] cntP = new int[256];int[] det = new int[256];//count firstint absSum = 0;for (int i = 0; i < p.length(); i++) {cntS[sc[i]]++;cntP[pc[i]]++;det[sc[i]]++;det[pc[i]]--;}for (int item : det) {absSum += Math.abs(item);}if (absSum == 0) {ans.add(0);}//count restfor (int i = p.length(); i < s.length(); i++) {int r = sc[i];int l = sc[i - p.length()];System.out.println("sc[i]="+sc[i]);System.out.println("r="+r);cntS[r]++;//both scntS[l]--;absSum = absSum - Math.abs(det[r]) - Math.abs(det[l]);//abs det[l]--;det[r]++;absSum = absSum + Math.abs(det[r]) + Math.abs(det[l]);if (absSum == 0) {ans.add(i - p.length() + 1);}}return ans;} } View Code

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/immiao0319/p/8450432.html

    總結(jié)

    以上是生活随笔為你收集整理的子串字谜substring anagrams的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。