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]))