日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串计数

發布時間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串计数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符串計數

題目描述

求字典序在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的個數。

所以計算的時候應該以長度作為變量遍歷len1到len2之間的字符串個數,最后相加。 3 4 private static int process(String str1, String str2, int len1, int len2) { 5 ????????char[] ch1 = str1.toCharArray(); 6 ????????char[] ch2 = str2.toCharArray(); 7 ????????long res = 0; 8 ????????for (int i = len1; i <= len2; i++) { 9 ????????????char a = ch1[0]; 10 ????????????char b = ch2[0]; 11 ????????????res += (long) Math.pow(26, i - 1) * (b - a); 12 ????????????long suma = 0; 13 ????????????long sumb = 0; 14 ????????????for (int j = 1; j < ch1.length; j++)// 找到比ch1剩余字符串小的字符串個數 15 ????????????{ 16 ????????????????suma = suma + (ch1[j] - 'a') * (long) Math.pow(26, i - 1 - j); 17 ????????????} 18 ????????????for (int j = 1; j < ch2.length; j++)// 找到比ch2剩余字符串小的字符串個數 19 ????????????{ 20 ????????????????sumb = sumb + (ch2[j] - 'a') * (long) Math.pow(26, i - 1 - j); 21 ????????????} 22 ????????????res = res + sumb - suma; 23 ????????} 24 ????????res--; 25 ????????res= res % 1000007; 26 ????????return (int) res; 27 ????}

?

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 }

?

總結

以上是生活随笔為你收集整理的字符串计数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。