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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode1177. 构建回文串检测(前缀和)

發布時間:2023/11/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode1177. 构建回文串检测(前缀和) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給你一個字符串 s,請你對 s 的子串進行檢測。

每次檢測,待檢子串都可以表示為 queries[i] = [left, right, k]。我們可以 重新排列 子串 s[left], …, s[right],并從中選擇 最多 k 項替換成任何小寫英文字母。

如果在上述檢測過程中,子串可以變成回文形式的字符串,那么檢測結果為 true,否則結果為 false。

返回答案數組 answer[],其中 answer[i] 是第 i 個待檢子串 queries[i] 的檢測結果。

注意:在替換時,子串中的每個字母都必須作為 獨立的 項進行計數,也就是說,如果 s[left…right] = “aaa” 且 k = 2,我們只能替換其中的兩個字母。(另外,任何檢測都不會修改原始字符串 s,可以認為每次檢測都是獨立的)

示例:

輸入:s = “abcda”, queries = [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]
輸出:[true,false,false,true,true]
解釋:
queries[0] : 子串 = “d”,回文。
queries[1] : 子串 = “bc”,不是回文。
queries[2] : 子串 = “abcd”,只替換 1 個字符是變不成回文串的。
queries[3] : 子串 = “abcd”,可以變成回文的 “abba”。 也可以變成 “baab”,先重新排序變成 “bacd”,然后把 “cd” 替換為 “ab”。
queries[4] : 子串 = “abcda”,可以變成回文的 “abcba”。

代碼

class Solution {int[][] t;public List<Boolean> canMakePaliQueries(String s, int[][] queries) {int n=s.length();List<Boolean> res=new ArrayList<>();t=new int[n+1][26];for (int i=1;i<=n;i++)//字符個數的前綴和{int cur=s.charAt(i-1)-'a';t[i]=t[i-1].clone();t[i][cur]++;}for(int[] c:queries)res.add(getCanMakePaliQueries(s,c[0],c[1])<=c[2]);return res;}public int getCanMakePaliQueries(String s, int l,int r) { //統計區間內組成回文需要改變的字符個數int res=0;int[] helper=new int[26];for(int i=0;i<26;i++){int c=t[r+1][i]-t[l][i];if(c%2==1)res++;}return res/2;} }

總結

以上是生活随笔為你收集整理的leetcode1177. 构建回文串检测(前缀和)的全部內容,希望文章能夠幫你解決所遇到的問題。

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