題意:給定乙個字串,求它有多少個子字串中包含sad序列
解題思路:
①先找出每一組字串[i,j],a[i]=『s』,a[j]=『d』,並且[i,j]中包含乙個點a[k]=『a』。使用的方法是找到每乙個『a』的前面最近的』s』,和後面最近的』d』
②處理字串中的每乙個』a』,求出所有包含sad的最短字串,對於相同的l,取r最小的儲存
③列舉左端點,每次讓當前字串包含乙個最近的sad字串即可,統計貢獻。
#define _crt_secure_no_warning
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
2e6+10;
#define ll long long
string s;
int pre[maxn]
;int next[maxn]
;ll ans;
struct node
;vector v;
intmain()
if(s[i]
=='a')}
for(
int i = sz; i >=
0; i--)if
(s[i]
=='a')}
for(
int i =
0; i < sz; i++)}
}int sz1 = v.
size()
;int cnt =0;
int pre1 =-1
;if(sz1 ==0)
for(
int i =
1; i < sz1; i++)}
else
}for
(int i =
0; i <= cnt; i++
) cout << ans << endl;
return0;
}
去掉char 字串前面空格 C 中字串的處理
tolower 把字串轉換為小寫,不會改變原字串,將建立乙個新的字串。toupper 把字串轉換為大寫,不會改變原字串,將建立乙個新的字串。trim 去除字串前後的空格,可以指定char陣列.trimstart 去除字串前面的空格.trimend 去除字串後面的空格.trim mychars 去除字...
880 索引處的解碼字串
給定乙個編碼字串s。為了找出解碼字串並將其寫入磁帶,從編碼字串中每次讀取乙個字元,並採取以下步驟 現在,對於給定的編碼字串s和索引k,查詢並返回解碼字串中的第k個字母。示例 1 輸入 s leet2code3 k 10輸出 o 解釋 解碼後的字串為 leetleetcodeleetleetcodel...
880 索引處的解碼字串
給定乙個編碼字串s。為了找出解碼字串並將其寫入磁帶,從編碼字串中每次讀取乙個字元,並採取以下步驟 現在,對於給定的編碼字串s和索引k,查詢並返回解碼字串中的第k個字母。示例1 輸入 s leet2code3 k 10 輸出 o 解釋 解碼後的字串為 leetleetcodeleetleetcodel...