蓝桥杯_翻转_C++

蓝桥杯_翻转_C++

题目描述:

蓝桥杯_翻转原题链接

题解:

解题思路:

思路:

1、S 和 T 都是由 多个0或1组合而成

① 数据输入:

第一行输入一个整数 D ,代表有 D 组 S和T 的组合

接下来 2D 行 依此代表T1,S1,T2,S2,...,TD,SD

② 数据处理 :010 -> 000, 101->111,可转换。判断 S 是否可以转换为 T,若可转换,需进行几次 01 变换

可通过 S 和 T 的挨个比较来进行判断::

  • 若 Si==Ti 则继续进行判断。
  • 若 Si!=Ti 则看Si 是否满足转换条件 (Si!=Si-1,Si!=Si+1) ,满足则转换Si,最后看S是否与T相等来判断是否可以转换。

代码实现

cpp 复制代码
#include <iostream> // 引入输入输出库
#include <string>   // 引入字符串库
using namespace std; // 使用标准命名空间

int main(int argc, char const *argv[])
{
    int D; // 用于存储测试用例的数量
    cin >> D; // 从标准输入读取测试用例数量
    int flag = 0; // 初始化一个标识变量,这里并未使用
    
    // 循环处理每一个测试用例
    for (int i = 0; i < D; i++){
        string S, T; // 声明两个字符串 S 和 T
        cin >> T >> S; // 从输入读取两个字符串 T 和 S
        int len = S.size(); // 获取字符串 S 的长度
        
        // 如果两个字符串相同,输出 0,表示不需要任何变换
        if (S == T){
            cout << 0 << endl; // 输出 0
            continue; // 跳过后续代码,进入下一次循环
        }
        
        // 如果 S 和 T 的首尾字符不同,输出 -1,表示无法通过变换匹配
        if (S[0] != T[0] || S[len - 1] != T[len - 1]){
            cout << -1 << endl; // 输出 -1
            continue; // 跳过后续代码,进入下一次循环
        }

        int count = 0; // 计数器,用于记录所需变换的次数
        
        // 遍历字符串 S 的中间字符(不包括首尾)
        for (int i = 1; i < len - 1; i++){
            // 如果当前字符 S[i] 不等于 T[i]
            if (S[i] != T[i]){
                // 检查当前字符 S[i] 的两侧字符是否与其不同
                if (S[i - 1] != S[i] && S[i + 1] != S[i]){
                    // 如果是,则将 S[i] 更改为 S[i-1]
                    S[i] = S[i - 1];
                    count++; // 记录变换次数
                } else {
                    break; // 如果不满足,停止变换
                }
            }
        }
        
        // 检查经过变换后 S 是否与 T 相等
        if (S == T){
            cout << count << endl; // 输出变换次数
        } else {
            cout << -1 << endl; // 输出 -1,表示无法匹配
        }
    }
    
    return 0; // 主函数返回 0,表示程序正常结束
}

蓝桥杯_翻转_原题链接

欢迎大家和我沟通交流(✿◠‿◠)

相关推荐
Ivanqhz1 小时前
BURG(自底向上重写生成器)
服务器·数据库·人工智能·深度学习·算法
牵猫散步的鱼儿1 小时前
C 和 C++ 区别
c++
言乐61 小时前
逻辑回归与利弊
人工智能·算法·机器学习·数据挖掘·逻辑回归
程序员老陆1 小时前
从语法糖到类型系统:深度拆解 C++ Lambda 与可调用对象的“血缘关系”
开发语言·c++·程序设计
(Charon)1 小时前
【C++面试】设计模式:手写单例模式与工厂模式
开发语言·c++
海绵宝宝转agent1 小时前
Leetcode100 二叉树的中序遍历
java·算法
无名猿1 小时前
shared_ptr 的线程安全边界:计数安全不等于对象安全
c++·内存管理·并发编程·现代c++
根目录下的猫1 小时前
ROS 2 C++(rclcpp)版本,实现话题订阅、话题发布,以及完整编译运行流程
开发语言·c++·算法
无名猿1 小时前
shared_mutex 读写锁该不该用,以及 volatile 的三大误解
c++·性能优化·并发编程·现代c++