字符串计数
字符串計數
題目描述
求字典序在s1和s2之間的,長度在len1到len2的字符串的個數,結果mod 1000007。
輸入描述:
每組數據包涵s1(長度小于100),s2(長度小于100),len1(小于100000),len2(大于len1,小于100000)輸出描述:
輸出答案。 示例1輸入
ab ce 1 2輸出
56?
?
牛客網題解:
首先要搞清楚字典序的意思:即從兩個字符串的下標為0開始進行對比,字典序是從左往右進行對比的。
例如ab,abc這樣兩者之間的字符串個數為aba、abb,而ab、bb兩者之間的字符串個數為:ac、ad、ae…az、ba這26個,所以高位的字符串個數要是26的i次冪。
其次,要理解題目的“長度在len1到len2的字符串的個數”,指的是長度在len1的字符串個數、長度在len1+1的字符串個數。。。長度為len2的字符串個數。
例abcde、acede這兩個字符串,長度為1到4表示的是長度為1的時候兩個字符a、a之間的個數,長度為2的時候兩個字符ab、ac之間的個數,長度為3的時候abc、ace兩個字符串之間的個數,長度為4:abcd、aced的個數。
?
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include<math.h> 5 using namespace std; 6 ? 7 int main(){ 8 ????//根據題中給出的例子,這個字符串只包含小寫字母,不然答案就不應該是56了 9 ????string s1,s2; 10 ????int len1,len2; 11 ????while(cin>>s1>>s2>>len1>>len2){ 12 ????????//只包含小寫字母的字符串可以看成26進制的數制 13 ????????//將s1和s2補長到len2長度 14 ????????s1.append(len2-s1.size(),'a'); 15 ????????s2.append(len2-s2.size(),(char)('z'+1)); 16 ????????vector<int> array; 17 ????????for(int i=0;i<len2;i++){ 18 ????????????array.push_back(s2[i]-s1[i]); 19 ????????} 20 ????????int result = 0; 21 ????????for(int i=len1;i<=len2;i++){ 22 ????????????for(int k=0;k<i;k++){ 23 ????????????????result += array[k]*pow(26,i-1-k); 24 ????????????} 25 ????????} 26 ????????//所有字符串最后都不包含是s2自身,所以最后要減1; 27 ????????cout<<result-1<<endl; 28 ????} 29 ????return 0; 30 }?
總結
- 上一篇: TransactionScope 的基本
- 下一篇: 静默安装oracle