PAT-1050 String Subtraction

1050 String Subtraction (20分)

Given two strings S​1​​ and S​2​​, S=S​1​​−S​2​​ is defined to be the remaining string after taking all the characters in S​2​​ from S​1​​. Your task is simply to calculate S​1​​−S​2​​ for any given strings. However, it might not be that simple to do it fast.

Input Specification:

Each input file contains one test case. Each case consists of two lines which gives S​1​​ and S​2​​, respectively. The string lengths of both strings are no more than 10​4​​. It is guaranteed that all the characters are visible ASCII codes and white space, and a new line character signals the end of a string.

Output Specification:

For each test case, print S​1​​−S​2​​ in one line.

Sample Input:

They are students.
aeiou

Sample Output:

Thy r stdnts.

題意:

給定兩個字符串 S1 和 S2,S=S1−S2 定義爲將 S1 中包含的所有在 S2 中出現過的字符刪除後得到的字符串。你的任務就是計算 S1−S2。

解題思路1:

暴力循環

程序代碼1:

#include<iostream>
using namespace std;
int main()
{
    string s1,s2;
    string res;
    getline(cin,s1);
    getline(cin,s2);
    for (int i=0;i<s1.size();i++)
    {
        bool flag = true;
        for (int j=0;j<s2.size();j++)
        {
            if (s1[i] == s2[j])
            {
                flag = false;
                break;
            }
        }
        if (flag)
            res += s1[i];
    }
    cout<<res<<endl;
    return 0;
}

解題思路2:

用哈希表數組統計字符串s2中出現的字符,然後遍歷字符串s1,將沒有出現的字符輸出。

程序代碼2:

 

#include <iostream>
using namespace std;
const int N= 100;
bool flag[N];
int main()
{
    string s1, s2;
    getline(cin, s1);
    getline(cin, s2);
    for (int i = 0; i < s2.length(); i++)
        flag[s2[i]] = true;
    for (int i = 0; i < s1.length(); i++)
        if (!flag[s1[i]])
            cout << s1[i];
    cout << endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章