字符环 与 变换的矩阵

字符环

现将字符串进行自加,这样就变成寻找两个字符串的最长的连续字符串。

使用滑动窗口法:通过对齐 两个字符串的各个位置,然后向后同时滑动比较,寻找最长的连续匹配。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
    string s1,s2;
    cin >> s1 >> s2;
    s1 += s1;
    s2 += s2;
    int n = s1.length(), m = s2.length();
    n /= 2;m /= 2;
    int max_len = 0;
    // 对齐方式:s1的每个字符与s2的每个字符对齐
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int len = 0;
            // 比较字符,但长度不能超过原字符串长度
            while (len < min(n,m) && s1[i + len] == s2[j + len]) {
                len++;
            }
            max_len = max(max_len, len);
        }
    }
    cout << max_len << endl;
    return 0;
}

变化的矩阵

对于奇数N×N矩阵,我们可以逐个检查这几种变换。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<string> original(n, string(n, ' '));
    vector<string> target(n, string(n, ' '));
    // 读取原始矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> original[i][j];  // 逐个字符读取
        }
    }
    
    // 读取目标矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> target[i][j];  // 逐个字符读取
        }
    }
    
    // 检查是否是顺时针旋转90度
    auto isClockwise90 = [&]() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (original[i][j] != target[j][n-1-i]) {
                    return false;
                }
            }
        }
        return true;
    };
    
    // 检查是否是逆时针旋转90度
    auto isCounterclockwise90 = [&]() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (original[i][j] != target[n-1-j][i]) {
                    return false;
                }
            }
        }
        return true;
    };
    
    // 检查是否是旋转180度
    auto isRotate180 = [&]() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (original[i][j] != target[n-1-i][n-1-j]) {
                    return false;
                }
            }
        }
        return true;
    };
    
    // 检查是否不变
    auto isSame = [&]() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (original[i][j] != target[i][j]) {
                    return false;
                }
            }
        }
        return true;
    };
    
    // 检查各种变换
    if (isClockwise90()) cout << 1 << endl;
    else if (isCounterclockwise90()) cout << 2 << endl;
    else if (isRotate180()) cout << 3 << endl;
    else if (isSame()) cout << 4 << endl;
    else cout << 5 << endl;
    
    return 0;
}
相关推荐
吃好睡好便好4 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅5 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue7 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路8 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星8 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑8 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光9 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩9 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494739 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ10 小时前
单词拆分----dp
算法