零基础学C/C++160——字符串
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
给定两个由小写字母组成的字符串A和B,判断B中的字符是否全部在A中出现。
输入
输入为多组测试数据。
输入数据只有一行,包含2个字符串A和B,每个字符串后面有一个#字符标记(#不属于A或B),其中B字符串不为空,两个字符串长度均不超过1000000。
输出
如果B中的字符全部在A中出现,输出Yes,否则输出No。
样例输入 Copy
abc#ab#
样例输出 Copy
Yes
零基础学C/C++160——字符串
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
檀越@新空间 2025-02-23 14:05关注下午好🌅🌅🌅
本答案参考通义千问好的,我们来解决这个问题。我们需要判断字符串B中的每一个字符是否都在字符串A中出现。我们可以使用哈希表(在C++中可以使用
unordered_set)来记录字符串A中出现的字符,然后检查字符串B中的每个字符是否都在这个集合中。以下是详细的解决方案:
- 读取输入:从标准输入读取多个测试用例。
- 处理每个测试用例:
- 使用一个
unordered_set来存储字符串A中的字符。 - 检查字符串B中的每个字符是否都在
unordered_set中。
- 使用一个
- 输出结果:如果所有字符都在集合中,则输出"Yes",否则输出"No"。
下面是具体的代码实现:
#include <iostream> #include <unordered_set> #include <string> using namespace std; int main() { string line; while (getline(cin, line)) { // 找到第一个 # 的位置 size_t pos = line.find('#'); if (pos == string::npos) { continue; // 如果找不到 #,则跳过这行 } // 获取字符串A和B string A = line.substr(0, pos); string B = line.substr(pos + 1); // 使用 unordered_set 存储字符串A中的字符 unordered_set<char> charSet(A.begin(), A.end()); bool allCharsPresent = true; for (char ch : B) { if (ch == '#') break; // 遇到 # 则停止检查 if (charSet.find(ch) == charSet.end()) { allCharsPresent = false; break; } } // 输出结果 if (allCharsPresent) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; }代码解释
-
读取输入:
while (getline(cin, line)) { // 找到第一个 # 的位置 size_t pos = line.find('#'); if (pos == string::npos) { continue; // 如果找不到 #,则跳过这行 } -
获取字符串A和B:
string A = line.substr(0, pos); string B = line.substr(pos + 1); -
使用
unordered_set存储字符串A中的字符:unordered_set<char> charSet(A.begin(), A.end()); -
检查字符串B中的每个字符是否都在
unordered_set中:bool allCharsPresent = true; for (char ch : B) { if (ch == '#') break; // 遇到 # 则停止检查 if (charSet.find(ch) == charSet.end()) { allCharsPresent = false; break; } } -
输出结果:
if (allCharsPresent) { cout << "Yes" << endl; } else { cout << "No" << endl; }
这样,我们就完成了对每个测试用例的处理,并正确地输出了结果。
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用