示例输入
4
ABCD
azazaz
abbzbba
flkjdh
示例输出
4
21个
22个
0
使用C ++编程:
#define ll long long
char s[1000010];
int main()
{
int t;
cin>>t;
char x;
scanf("%c",&x);
while(t--)
{
scanf("%s",s);
int l=-1;
int len=strlen(&s[0]);
ll ans=0;
for(int i=0;s[i]!='\0';i++)
{
if(s[i]=='a' || s[i]=='z')
{
ans+=((i-l)*(len-i));
l=i;
}
}
cout<<ans<<endl;
}
}
Ruby程序:
n = gets.chomp.to_i
ans = []
for x in 0..n-1
str1 = gets.chomp
l = str1.size
count = 0
i = 0
le = -1
str1.each_char do |cha|
if(cha == 'a' || cha == 'z')
count += (i-le)*(l-i)
le = i
end
i += 1
end
ans[x] = count
end
puts ans
当考虑更长的字符串时,Ruby比C ++慢15倍。为什么呢?
答案 0 :(得分:2)
C ++和Ruby程序不一样。 C ++程序使用char
缓冲区进行输入 - 它“循环”内存 - 而Ruby程序使用gets
,每次都分配新的内存,这会对性能造成影响。
此外,Ruby程序使用数组来存储答案 - 并且该数组一直在调整大小! C ++使用单个答案变量,它在每次迭代时打印 - 这要快得多。
即使您更改程序以消除这两个差异,Ruby程序仍然会更慢 - 但可能不会那么多。