70

编程题 70 /86

有两个字符串s 和t,如果即从s 中删除一些字符,将剩余的字符连接起来,即可获得t。则称t是s 的子序列。
请你开发一个程序,判断t是否是s的子序列。

参考答案

思路:定义两个字符串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;
}