一天蒜頭君得到 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 為字尾的字串的個數。...