当前位置: 首页 > news >正文

[蓝桥杯]找到给定字符串中的不同字符

题目描述

在不考虑字符排列的条件下,对于相差只有一个字符的两个字符串,实现一个算法来识别相差的那个字符。要求如下:

  1. 当传入的字符串为 aad 和 ad 时,结果为 a

  2. 当传入的字符串为 aaabccdd 和 abdcacade 时,结果为 e

输入描述

输入两行字符串,长度均不超过 100。

输出描述:

输出一行,为相差的那个字符。

输入输出样例

示例

输入

aad
ad

输出

a

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 5726  |  总提交次数: 6103  |  通过率: 93.8%

难度: 中等   标签: 新手

方法思路

题目要求找出两个字符串中相差的那个字符(两个字符串长度相差1,且只相差一个字符)。最优解法是利用​​异或运算​​的性质:

复杂度分析

示例验证

  1. ​异或特性​​:相同字符异或结果为0,任何字符与0异或结果为本身。
  2. ​核心思路​​:将两个字符串的所有字符进行异或运算,成对出现的字符会相互抵消(结果为0),最终剩下的字符就是相差的那个字符。
  3. ​优势​​:时间复杂度为O(n),空间复杂度O(1),效率高且代码简洁。
    #include <iostream>
    #include <string>
    using namespace std;int main() {string s1, s2;getline(cin, s1);  // 读取第一行字符串getline(cin, s2);  // 读取第二行字符串// 检查输入是否为空(题目要求非空,但需处理None情况)if (s1.empty() || s2.empty()) {cerr << "TypeError: str1 or str2 cannot be None" << endl;return 1;}char result = 0;// 遍历s1所有字符进行异或for (char c : s1) {result ^= c;}// 遍历s2所有字符进行异或for (char c : s2) {result ^= c;}cout << result << endl;  // 输出相差的字符return 0;
    }

    代码解释

  4. ​输入处理​​:

    • 使用getline()读取两行字符串,确保包含空格也能正确处理。
    • 检查输入是否为空,若为空则抛出TypeError(符合题目要求)
  5. ​异或运算​​:

    • 初始化result = 0
    • 遍历s1的每个字符,与result异或:相同字符会抵消(如'a' ^ 'a' = 0)。
    • 遍历s2的每个字符,再次与result异或:最终结果即为相差字符(因该字符只出现一次,无法被抵消)
  6. ​输出结果​​:

    • 直接输出result,即相差的字符。
  7. ​输入​​:aad 和 ad
    ​计算过程​​:
    'a' ^ 'a' ^ 'd' ^ 'a' ^ 'd' = ('a' ^ 'a' ^ 'a') ^ ('d' ^ 'd') = 'a' ^ 0 = 'a'
    ​输出​​:a(正确)

  8. ​输入​​:aaabccdd 和 abdcacade
    ​输出​​:e(因e仅在第二个字符串中出现一次)

  9. ​时间复杂度​​:O(n),仅需遍历两个字符串各一次。
  10. ​空间复杂度​​:O(1),仅使用常量空间。
http://www.xdnf.cn/news/772615.html

相关文章:

  • NodeJS全栈WEB3面试题——P1基础知识:区块链与Web3原理
  • 逆向工程API和无头浏览器的区别
  • 将前后端分离版的前端vue打包成EXE的完整解决方案
  • 电脑的ip地址会自动变怎么办?原因解析和解决方法
  • Missashe考研日记—Day51-Day57
  • 软件开发项目管理工具选型及禅道开源版安装
  • docker可视化工具
  • 英文投资理财源码挖矿源码投资理财系统源码(源码下载)
  • 头指针 VS 头节点 VS 首元节点
  • 20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框
  • Linux 中 m、mm、mmm 函数和 make 的区别
  • ⚡️ Linux grep 命令参数详解
  • Python:操作 Excel 格式化
  • 数据库管理-第332期 大数据已死,那什么当立?(20250602)
  • 关于replacedialog控件问题指南
  • JavaSwing中使用JxBroser与JavaScript进行异步通信
  • Rust 变量与可变性
  • 【Day43】
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段(10):语法单词
  • 手机归属地查询接口如何用Java调用?
  • 【存储基础】SAN存储基础知识
  • 专业数据对比工具推荐
  • Python 训练 day40
  • 揭秘 CompletedFuture 的设计精髓(深入实现分析)
  • 九.C++ 对引用的学习
  • 统计随机行走的结构占比
  • JDK21深度解密 Day 12:大规模迁移JDK21方法论
  • PAT-甲级JAVA题解(更新中...)
  • RGB888色彩格式转RGB565格式
  • 海外tk抓包简单暴力方式