列表

详情


NC208120. 简单粗暴串

描述

有一个字符序列,对于另一个给定的字符序列,请计算与其在原字符序列中出现了几次(原序列中每个字符尽可出现一次)。

输入描述

输入中含有一些数据,分别是成对出现的原序列与新序列,均不会超过1000个字符长。如果遇见#字符,则不再进行工作。

输出描述

输出新序列在原字符序列中出现的次数,如果一次都没有,那就老老实实输出0,每个结果之间应换行。

示例1

输入:

abcde a3
aaaaaa  aa
#

输出:

0
3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3(pypy3.6.1) 解法, 执行用时: 45ms, 内存消耗: 18672K, 提交时间: 2020-06-20 13:15:51

def solve():
    ans = 0
    s = input()
    if s == '#':
        exit(0)
    s, t = s.split()
    ans = 0
    cur = 0
    while cur < len(s):
        l = s.find(t, cur)
        if l == -1:
            break
        ans += 1
        cur = l + len(t)
    print(ans)

while True:
    solve()

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 492K, 提交时间: 2020-06-20 17:22:08

#include<bits/stdc++.h>
using namespace std;
string s, t;
int main()
{
	while(cin >> s && s != "#")
	{
		cin >> t;
		int ans = 0;
		for(int i = 0, j; s[i]; i++)
		{
			for(j = 0; t[j] && s[i+j] == t[j]; j++);
			if(!t[j])
				ans++, i += j-1;
		}		
		cout << ans << endl;
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 356K, 提交时间: 2020-06-20 17:54:38

#include<iostream>
#include<string>
int main()
{
std::string s, t;
while (std::cin >> s >> t)
{
int res = 0;
size_t pos = 0;

while ((pos = s.find(t, pos)) != std::string::npos)
{
pos += t.size(); 
++res; //
}
std::cout << res << std::endl;
}
return 0;
}

Python3(3.5.2) 解法, 执行用时: 27ms, 内存消耗: 3428K, 提交时间: 2020-06-21 14:56:09

while(1):
    s = input()  
    if(s=="#"): break
    s = s.split()
    print(s[0].count(s[1]))

上一题