题目
给两个字符串,找出第一个字符串中第二个没有的,记录的时候不区分大小写,但是读入的时候要区分大小写
代码和思路
- 因为记录的时候不区分大小写,所以需要一个大小写的转换函数
- 为了记录字母是否已经被记录下来,需要Hash表,直接使用map也可以不会超时
- 不同的时候,只有原字符串的指针++,相同的时候,两个指针都++
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
char broke[100];
int index = 0;
map<char, int> finde;
char converse(char s) {
if (s >= 'a' && s <= 'z') {
return s - 'a' + 'A';
}
if (s >= 'A' && s <= 'Z') {
return s - 'A' + 'a';
}
return s;
}
bool exchange(char s){
if (finde.find(s) != finde.end()) {
return false;
}
else {
finde[s] = 1;
finde[converse(s)] = 1;
return true;
}
}
int main() {
string oristr;
string brostr;
cin >> oristr;
cin >> brostr;
int i = 0, j = 0;
while (i < oristr.length() && j < brostr.length()) {
bool flag;
if (oristr[i] != brostr[j]) {
flag = exchange(oristr[i]);
if (flag) {
char key = oristr[i];
if (oristr[i] >= 'a' && oristr[i] <= 'z') {
key = converse(key);
}
broke[index++] = key;
}
i++;
}
else {
i++;
j++;
}
}
while (i < oristr.length()) {
char key = oristr[i];
bool flag;
flag = exchange(oristr[i]);
if (flag) {
if (oristr[i] >= 'a' && oristr[i] <= 'z') {
key = converse(key);
}
broke[index++] = key;
}
i++;
}
printf("%s", broke);
}