首页 > 试题广场 >

All-in-All

[编程题]All-in-All
  • 热度指数:557 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有两个字符串s 和t,如果即从s 中删除一些字符,将剩余的字符连接起来,即可获得t。则称t是s 的子序列。
请你开发一个程序,判断t是否是s的子序列。

输入描述:
输入包含多组数据,每组数据包含两个字符串s和t。

它们都由数字和字母组成,且长度小于100000。


输出描述:
对应每一组输入,如果t是s的子序列,则输出“Yes”;否则输出“No”。
示例1

输入

ABC ABC
ABC AB
ABC DE

输出

Yes
Yes
No
推荐
思路:定义两个字符串str1 和 str2,接收输入,然后定义两个循环变量i 和 j,令j = 0。从i = 0 ~ str1.length() - 1判断,如果str1[i] == str2[j],则 j ++, i ++;否则i ++,继续判断。直到i == str1.length()或j == str2.length(),退出循环。
    如果j == str2.length(), 即str2所有字符都可以在str1中顺序找到,输出“Yes”;否则输出“No”。
代码如下:
// write your code here cpp
#include <iostream>
#include <string>
using namespace std;
void jugeStr(string str1, string str2)
    {
    int len1 = str1.length(), len2 = str2.length();
    int i, j;  //定义str1和str2的循环变量
    for(i = 0, j = 0; i < len1 && j < len2;)
        {
        //如果str1[i] == str2[j],则移到str2的下一位
        if(str1[i] == str2[j])
            j ++;
        i ++;   //移到str1的下一位
    }
    if(j == len2)  //如果str2遍历完毕,表示str1中存在str2的所有字符
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}
int main()
    {
    string s1, s2;
    while(cin >> s1 >> s2)
        jugeStr(s1, s2);
    return 0;
}
编辑于 2016-06-30 15:26:03 回复(0)

python solution

使用贪心算法。

import sys

for i in sys.stdin.readlines():
    str1, str2 = i.strip().split()
    for i in str1:
        if str2 and i == str2[0]:
            str2 = str2[1:]
    print("Yes" if not str2 else "No")
发表于 2017-11-16 18:23:44 回复(0)