首页 > 其他分享 >字符串最小表示法

字符串最小表示法

时间:2024-12-12 11:36:57浏览次数:3  
标签:int 最小 表示法 ++ 字符串 size

字符串最小表示法

其实就是用双指针进行一个自我比较。 模板:


#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    int original_length = s.size();

    // 将每个字符添加到字符串的末尾
    for (int i = 0; i < original_length; i++) {
        s.push_back(s[i]);
    }

    // 输出新的字符串
    for (int i = 0; i < s.size(); i++) {
        cout << s[i];
    }
    cout << endl;

    // 初始化变量 n 为原始字符串的长度
    int n = original_length;
    int i = 0, j = 1;

    // 使用双指针法找到最小字典序的子串
    while (i <= n && j <= n) {
        int k;
        for (k = 0; k < n && s[i + k] == s[j + k]; k++);
        if (k == n) break; // 如果找到了一个匹配的子串,退出循环
        if (s[i + k] > s[j + k]) {
            i = i + k + 1; // 移动 i 指针
            if (i <= j) i = j + 1; // 确保 i 和 j 不重叠
        }
        else {
            j = j + k + 1; // 移动 j 指针
            if (i >= j) j = i + 1; // 确保 i 和 j 不重叠
        }
    }

    // 输出最小字典序的子串
    for (int r = i; r < i + n; r++) {
        cout << s[r];
    }
    cout << endl;

    return 0;
}
    

标签:int,最小,表示法,++,字符串,size
From: https://www.cnblogs.com/AnnaStore/p/18602043

相关文章

  • 使用递归实现指定最小值和最大值之间的所有整数求和
    functionsumRangeRecursive(min,max){//基本情况:如果最小值大于最大值,则返回0(空范围)if(min>max){return0;}//递归步骤:返回当前最小值加上剩余范围的和returnmin+sumRangeRecursive(min+1,max);}//示例用法:console.log(sumRangeRecurs......
  • ### 最大化相邻字符ASCII码之差的最小值:C语言实现与详解
    在字符串处理问题中,如何调整字符的排列以最大化相邻字符ASCII码之差的最小值是一个有趣的挑战。本文将通过一个具体的C语言实现,带你了解这一问题的解决思路和代码细节。####问题描述给定一个字符串,通过调整其字符顺序,使得字符串中任意相邻字符ASCII码之差的最小值最大。###......
  • [LeetCode] 1368. Minimum Cost to Make at Least One Valid Path in a Grid 使网格图
    Givenan mxn grid.Eachcellofthegridhasasignpointingtothenextcellyoushouldvisitifyouarecurrentlyinthiscell.Thesignof grid[i][j] canbe:1 whichmeansgotothecelltotheright.(i.egofrom grid[i][j] to grid[i][j+1])......
  • 算法日记 47 day 最小生成树(prim,kruskal)
    今天主要是针对最小生成树的两种算法。用题目来举例题目:寻宝53.寻宝(第七期模拟笔试)(kamacoder.com)题目描述在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。不同岛屿之间,路途距离不同,国王希望你可......
  • 最小生成树(prim和kruskal)学习笔记
    有两个求最小生成树的算法,prim算法和kruskal算法。这两种算法都可以处理边权为负的情况,并且可以处理有负权回路的情况。接下来会分析一下两个算法的区别。prim算法这个算法思路主要是不断向最小生成树中添加点,而这个添加的点是距离生成树最近的点。这个算法主要用在稠密图里......
  • nodejs长字符串RSA加解密解决方法
            为了让项目数据在前后端交互过程中不被拦截破解,在项目中使用RSA对数据进行加解密,同时考虑到交互数据过大情况,于是想到将数据在加密前先进行压缩,解密后在解压的思路。        基于nodejs代码进行测试,得到了验证。constNodeRSA=require('node-rsa')......
  • (nice!!!)(LeetCode 热题 100) 76. 最小覆盖子串(哈希表、滑动窗口、双指针)
    题目:76.最小覆盖子串思路:用哈希表来记录字符串t中字符出现的情况。然后用双指针来实现滑动窗口,找到最小的字符串即可。时间复杂度为0(m+n),细节看注释。classSolution{public:stringminWindow(strings,stringt){ //哈希表unordered_map<char......
  • 杂谈篇:深度理解最小二乘
    前言        最近笔者在学习过程中经常使用到误差平差原理相关的知识,所以写这篇文章来回忆一下平差的最深层原理,也就是最小二乘法。二.最小二乘法的一些应用2.1最小二乘法与线性回归      之前我有文章写过线性回归的相关内容,而它是基于最小二乘法原理进行的......
  • Linux shell字符串截取
    原文参考https://www.cnblogs.com/cavan2021/p/17484032.html自己试过之后,觉得有些地方需要进一步说明,写一点自己的理解。一、从指定位置截取,截掉左边,保留右边${string:start:length}从string字符串的左数第start个字符开始,向右截取 length个字符。${string:start}从......
  • 在 Java 中,要处理 未知的输入格式(可能是日期字符串或时间戳字符串),统一返回日期对象。
    在Java中,要处理未知的输入格式(可能是日期字符串或时间戳字符串),可以通过以下步骤实现:判断输入是日期字符串还是时间戳字符串。如果是全数字组成的字符串,可以尝试将其解析为时间戳。否则,按照支持的日期格式解析。支持多种日期格式。定义常见日期格式的数组,逐一尝试解......