字符串计数

来源:互联网 发布:linux 查询ftp端口 编辑:程序博客网 时间:2024/06/04 19:31

Question

题目描述
求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。

输入描述:
每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)

输出描述:
输出答案。

输入例子:
ab ce 1 2

输出例子:
56

Algorithm

字典序是指,先按每行最左边的数进行排序,若有相同的则比较它们的第二个数,以些类推只到比较出大小。比如”zbc”>”abcde”。
解法举个例子来说明:
ab ce 1 2
长度为1时,介于两者之间的字符串有一个(’c’-‘a’)
长度为2时,介于两者之间的字符串有(‘c’-‘a’)*26+(‘e’-‘b’)
题目默认都是小写,有点像26进制,逐个比较每位的差值

Code

#include<iostream>#include<string>#include<vector>#include<math.h>using namespace std;int main(){    string s1,s2;    int len1,len2;    while(cin>>s1>>s2>>len1>>len2){        s1.append(len2-s1.size(),(char)('a'-1));        s2.append(len2-s2.size(),(char)('z'+1));        vector<int> vec;        int res=0;        for(int i=0;i<len2;i++)            vec.push_back(s2[i]-s1[i]);        for(int i=len1;i<=len2;i++){            int tmp=0;            for(int k=0;k<i;k++){                tmp=tmp*26+vec[k];            }            res+=tmp;        }        cout<<(res-1)<<endl;    }    return 0;}
0 0
原创粉丝点击