题目要求判断输入的两个字符串其中一个是否为另一个的子串。
总时间限制: 1000ms 内存限制: 65536kB
字符串s和t均由字母组成,若在t中除去一些字母能够得到s,我们就说s是t的一个子串。比如abc就是acbefc的子串
(acbefc去掉第二、第四、第五个字符后就得到abc)
有若干组输入数据,每组一行,分别为字符串s和t,s与t之间用空格隔开
对于一组s与t,若s是t的子串,则输出Yes,否则输出No
sequence subsequence
abc acb
VERDI vivaVittorioEmanueleReDiItalia
Yes
No
Yes
题目定义的子串指第二个字符串删除某些字符后为第一个字符串,也就是说第二个字符串应该是第一个字符串中插入了一些字符,所以如果是子串,第二个字符串应该按顺序包含第一个字符串的全部字符,由此我们可以同时遍历两个字符串,当出现不一致的情形,第二个字符串就跳过一个字符,如果直到结尾仍然不能匹配第一个字符串就说明不是子串。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s, t;
while (cin >> s >> t) {
int i = 0, j = 0;
while (i < s.length() && j < t.length()) {
if (s[i] == t[j]) {
i++;
}
j++;
}
cout << (i == s.length() ? "Yes" : "No") << endl;
}
return 0;
}
4018.cpp 代码长度:293B 内存:128kB 时间:1ms 通过率:87% 最小内存:128kB 最短时间:0ms
采用string类型输入字符串比较省心,遍历比较字符串后可判断第一个字符串的下标移动情况,如果移动到了第一个字符串结尾则说明第二个字符串完全包含第一个字符串。
有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。