NOJ2452 悲傷的史大佬(字串處理)

2021-10-10 22:15:36 字數 1067 閱讀 7151

題意:給定乙個字串,求它有多少個子字串中包含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...