旧键盘 (20) (c++/python)

来源:互联网 发布:苹果最新软件 编辑:程序博客网 时间:2024/05/18 03:41

思路(对应解法二):
对输入1进行hash,由于所有的正确按键都应该响应,仅仅只有坏的按键不响应,那么对照hash判断输入2,对存在的字符进行标记;
那么遍历输入2一遍以后,没有被标记的字符就是有问题的坏键盘按键,顺序输出即可。

解法一: (思路比较自然简单的解法)

#include <iostream>#include <cstring> using namespace std;int main(){    char str1[85], str2[85];    int ascii[200];    cin >> str1 >> str2;    memset(ascii, 0, sizeof(ascii));    int length = (int)strlen(str1);    int cnt = 0;    for (int i = 0; i < length; ++i) {        if (str2[cnt] != str1[i]) {            char ch = str1[i];            // 转为大写            ch = toupper(ch);            // 避免重复            if (ascii[ch] == 0) {                ++ascii[ch];                cout << ch;            }        }        else{            ++cnt;        }    }    return 0;}

解法二:(利用hash的概念)

数组用了布尔值,就不用memset函数了

#include<iostream>#include<string>using namespace std;int main(){    string s1, s2;    cin >> s1 >> s2;    bool hash[256] = { false };//hash数组    int len_1 = s1.length(), len_2 = s2.length();    //s2中出现的键都是好的,标记为true    for (int i = 0; i<len_2; ++i)    {        s2[i] = toupper(s2[i]);//转成大写        hash[s2[i]] = true;    }    //s1中出现的键如果未标记为true,则是坏键。    for (int i = 0; i<len_1; ++i)    {        s1[i] = toupper(s1[i]);        if (hash[s1[i]] == false)            cout << s1[i];        hash[s1[i]] = true;//输出坏键后标记为true,否则会重复输出。    }    system("pause");    return 0;}

解法三:
这题目python只要两三行代码:

a,b=raw_input(),raw_input()c=[i.upper() for i in a if i not in b]print "".join( sorted( list(set(c)),key=c.index ) )
0 0