map 字尾字串

2022-06-03 20:12:09 字數 1444 閱讀 7034

一天蒜頭君得到 n 個字串 si?,每個字串的長度都不超過 10。

蒜頭君在想,在這 n 個字串中,以 si 為字尾的字串有多少個呢?

輸入格式

第一行輸入乙個整數 n。

接下來 n 行,每行輸入乙個字串 si。

輸出格式

輸出 n 個整數,第 i個整數表示以 si為字尾的字串的個數。

資料範圍

對於 50%的資料,1≤n≤10^3。

對於 100%的資料,1≤n≤10^5。

所有的字串僅由小寫字母組成。

輸入樣例:3ba

aaba

輸入樣例:23

1解一,由於50%資料量在10^3,所以嘗試暴力破解,但是會超時,可以過50%的資料:

#include #include 

#include

using

namespace

std;

string v[100005]; //

字串陣列 比vector節省

intmain()

for(int i=0;i//

v[i]為作為字尾的字串

num=0

; a=v[i];

for(int p=0;p//

v[p]為長字串,判斷是否以v[i]字尾

b=v[p];

if(a.length()>b.length())

int ok=1

;

for(int k=0;k//

k為字尾的位置

if(a[k]!=b[b.length()-a.length()+k])

}num+=ok;

}printf(

"%d\n

",num);

}return0;

}

解二:把每個字串的每個字尾串放入map,再在map中找以每個字串字尾的結果數(ac**)

#include #include 

#include

#include

using

namespace

std;

string v[100000

];int

main() //

並且每個字串不可能提供重複的字尾串,因為每個字串提供的字尾串隨j的迴圈長度在減小

}

for(int i=0;i)

return0;

}

字尾字串排序

題目描述 對於乙個字串,將其字尾子串進行排序,例如grain 其子串有 grain rain ain in n 然後對各子串按字典順序排序,即 ain,grain,in,n,rain 輸入描述 每個案例為一行字串。輸出描述 將子串排序輸出 示例1 輸入grain 輸出ain grain in n r...

程式設計 字尾字串

恢復內容開始 計算課的練習,今天從上午到晚上吃完飯一直在寫這個題。先看資料量,判斷是否可以暴力窮舉。n最大10w,互相比較每兩個字串要 1 10w 2 10w大概50億次,但是這個數還要再乘上兩個字串比較時所用的 操作符函式的用的時間,這個函式時間複雜度與字串長度正相關。題中字串長度最大為10 即最...

查詢字尾字串出現的次數

一天蒜頭君得到 nn 個字串 s isi 每個字串的長度都不超過 1010。蒜頭君在想,在這 nn 個字串中,以 s isi 為字尾的字串有多少個呢?第一行輸入乙個整數 nn。接下來 nn 行,每行輸入乙個字串 s isi 輸出 nn 個整數,第 ii 個整數表示以 s isi 為字尾的字串的個數。...