目录
示例示例
Explanation
解释
Naive Approach
天真的方法
动态规划
Idea
实施
Example
示例
输出
结论
首页 后端开发 C++ 对于Q个查询,将以下内容翻译成中文:在三进制字符串中,需要替换的最小字符数以删除所有回文子字符串

对于Q个查询,将以下内容翻译成中文:在三进制字符串中,需要替换的最小字符数以删除所有回文子字符串

Sep 07, 2023 am 10:29 AM
替换 最小字符数

对于Q个查询,将以下内容翻译成中文:在三进制字符串中,需要替换的最小字符数以删除所有回文子字符串

回文字符串是指与其反转字符串相等的字符串。给定一个包含‘0’、‘1’和‘2’的字符串,以及一个长度为N的数组Q,给定数组的每个索引表示一个范围,范围由一对形式的值表示。我们需要找到在给定范围内需要替换的最小字符数,以确保该范围内没有任何回文子字符串。

示例示例

Input1: string s: “01001020002”, int Q = {{0,4}, {2,5}, {5,10}};
登录后复制
Output: 1 1 3
登录后复制

Explanation

的中文翻译为:

解释

对于范围0到4,我们有两个回文数010和1001,我们可以将索引2改为'2',这样就不会有回文数剩下。

对于范围2到5,我们只有一个回文数是010,可以通过将第一个零改为2来改变。

对于范围在5到10之间的数字,我们有回文数020、000和20002。我们可以将第一个2更改为'1',将下一个索引的'0'更改为'2',并将倒数第二个索引的值更改为'1',以去除所有的回文数。

Naive Approach

的中文翻译为:

天真的方法

在这种方法中,思路是获取给定范围的所有组合,并找到没有回文数的组合,所需的最小更改次数。但问题是时间复杂度。

要实现这种方法,我们必须进行递归调用,并遍历字符串。在每个索引处,我们有三种选择,使得获取所有字符串的时间复杂度为3^N。现在,我们必须回答Q个查询,并且对于每个情况,我们必须检查删除回文字符串是否使得时间复杂度为O(Q*N*(3^N))。

对于递归调用,我们必须维护N的空间,这意味着空间复杂度为O(N)。

动态规划

Idea

的中文翻译为:

Idea

这个问题的思路是,我们不需要在给定范围内找到任何回文数,最小可能的回文数长度是偶数长度为2,奇数长度为3。

我们有三个不同的字符,我们需要它们全部来使给定的字符串没有回文。总共有size个选择或序列,我们可以以这样的方式形成序列,即没有回文存在,而这些序列是字符串'012'的排列。

我们将使用dp数组或向量来存储所有可能的情况,每个序列都会给出较少的字符数,我们将使用该序列。

实施

在实现部分中,首先,我们将创建一个函数,该函数将接受一个字符串、序列、DP向量和序列数量作为参数,并更新DP向量。

在这个函数中,首先,我们将更新第一个索引的值,然后对于每个未匹配的情况,我们将更新DP向量当前索引的值。

我们将创建另一个函数,在该函数中我们将手动输入所有可能的序列,并将它们存储在数组中,并创建一个DP向量。

我们将通过传递值来调用上述函数进行预处理,然后通过一一遍历来回答每个查询。

Example

的中文翻译为:

示例

#include <bits/stdc++.h>
#define SIZE 100005
using namespace std;
// function to get the pre-processing of the results 
void preprocess(string& str, string& seq, vector<vector<int>>&dp, int n, int i){
   dp[i][0] = (str[0] != seq[0]); // initialzie dp vector 
   for (int j = 1; j < n; j++) {
   
      // storing the results if matched then adding zero otherwise one
      dp[i][j] = dp[i][j - 1] + (str[j] != seq[j % 3]);
   }
   return;
}

// function to find the number of changes required for each query 
void changesReq(string str, vector<pair<int, int>> Q){
   int len = str.length(); // size of the given string 
   int q = Q.size(); // number of queries 
   vector<vector<int>>dp(6,vector<int>(len)); // dp vector to store the states results 
   
   // vector to store each possible non-palindromic sequency 
   vector<string> seq= { "012", "021", "102", "120", "201", "210" };
   for (int i = 0; i < 6; i++){
   
      // for each sequence storing state results in vector 
      preprocess(str, seq[i], dp, len, i);
   }	
   
   // getting all the queries 
   for (int i = 0; i < q; i++){
      int l = Q[i].first;
      int	r = Q[i].second;
      int ans = INT_MAX;
      
      // finding the minimum cost amount 
      for (int j = 0; j < 6; j++) {
         // Find the cost
         ans = min(ans, dp[j][r] - dp[j][l] + (str[l] != seq[j][l%3]));
      }
      cout <<ans<<"  ";
   }
}
int main(){
   string str = "01001020002";
   vector<pair<int, int>>Q = {{0,4}, {2,5}, {5,10}};
   
   // calling the function 
   cout<<"The minimum characters to be replaced in the Ternary string to remove all palindromic substrings for Q queries is "<<endl;
   changesReq(str, Q);
   return 0;
}
登录后复制

输出

The minimum characters to be replaced in the Ternary string to remove all palindromic substrings for Q queries is 
1  1  3  
登录后复制

时间和空间复杂度

以上代码的时间复杂度为O(N + Q),其中N是字符串中字符的数量,Q是查询的数量。

上述代码的空间复杂度为O(N),因为我们将状态存储在大小为N的向量中。

结论

在本教程中,我们实现了一段代码来找出在给定范围内进行一些查询时需要改变的最小字符数,以便不留下回文字符串。我们使用动态规划的概念实现了该代码,时间复杂度为O(N+Q),空间复杂度为O(N)。

以上是对于Q个查询,将以下内容翻译成中文:在三进制字符串中,需要替换的最小字符数以删除所有回文子字符串的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用java的StringBuilder.replace()函数替换指定范围的字符 使用java的StringBuilder.replace()函数替换指定范围的字符 Jul 24, 2023 pm 06:12 PM

使用java的StringBuilder.replace()函数替换指定范围的字符在Java中,StringBuilder类提供了replace()方法,可以用来替换字符串中指定范围的字符。该方法的语法如下:publicStringBuilderreplace(intstart,intend,Stringstr)上面的方法用于替换从索引star

5分钟掌握PyCharm替换快捷键,轻松提升编程速度! 5分钟掌握PyCharm替换快捷键,轻松提升编程速度! Feb 22, 2024 am 10:57 AM

PyCharm是一款常用的Python集成开发环境,拥有丰富的功能和快捷键,能够帮助开发者提高编程效率。在日常的编程过程中,掌握PyCharm的替换快捷键技巧可以帮助开发者更快捷地完成任务。本文将为大家介绍PyCharm中一些常用的替换快捷键,帮助大家轻松提升编程速度。1.Ctrl+R替换在PyCharm中,可以使用Ctrl+R快捷键来进行替换操

使用jQuery替换元素的class名称 使用jQuery替换元素的class名称 Feb 24, 2024 pm 11:03 PM

jQuery是一种经典的JavaScript库,被广泛应用于网页开发中,它简化了在网页上处理事件、操作DOM元素和执行动画等操作。在使用jQuery时,经常会遇到需要替换元素的class名的情况,本文将介绍一些实用的方法,以及具体的代码示例。1.使用removeClass()和addClass()方法jQuery提供了removeClass()方法用于删除

PyCharm新手指南:替换功能全面解析 PyCharm新手指南:替换功能全面解析 Feb 25, 2024 am 11:15 AM

PyCharm是一款功能强大的Python集成开发环境,具有丰富的功能和工具,能够极大地提高开发效率。其中,替换功能是开发过程中经常用到的功能之一,能够帮助开发者快速修改代码并提高代码质量。本文将详细介绍PyCharm的替换功能,并结合具体的代码示例,帮助新手更好地掌握和使用该功能。替换功能简介PyCharm的替换功能可以帮助开发者在代码中快速替换指定的文本

PyCharm替换快捷键,让编程更得心应手! PyCharm替换快捷键,让编程更得心应手! Feb 21, 2024 pm 12:03 PM

PyCharm是一款广受程序员欢迎的集成开发环境,它提供了强大的功能和工具,让编程变得更加高效和便捷。而在PyCharm中,合理设置和替换快捷键是提高编程效率的关键之一。本文将介绍如何在PyCharm中替换快捷键,让编程更加得心应手。一、为什么要替换快捷键在PyCharm中,快捷键可以帮助程序员快速完成各种操作,提高编程效率。然而,每个人习惯不同,有些人可能

揭秘PyCharm中快速替换代码的方法 揭秘PyCharm中快速替换代码的方法 Feb 25, 2024 pm 11:21 PM

PyCharm是广受开发者喜爱的Python集成开发环境,它提供了许多快速替换代码的方法,让开发过程更加高效。本文将揭秘PyCharm中几种常用的快速替换代码的方法,并提供具体的代码示例,帮助开发者更好地利用这些功能。1.使用替换功能PyCharm提供了强大的替换功能,可以帮助开发者快速替换代码中的文本。通过快捷键Ctrl+R或者在编辑器中右键点击选择Re

MySQL中如何使用REPLACE函数替换字符串中的指定部分 MySQL中如何使用REPLACE函数替换字符串中的指定部分 Jul 25, 2023 pm 01:18 PM

MySQL是一种常用的关系型数据库管理系统,它提供了多种函数来处理和操作数据。其中,REPLACE函数是用来替换字符串中的指定部分内容的。在本文中,将介绍如何在MySQL中使用REPLACE函数进行字符串替换,并通过代码示例来演示其用法。首先,我们来了解一下REPLACE函数的语法:REPLACE(str,search_str,replace_str)其

如何使用Python在Excel中替换一个单词? 如何使用Python在Excel中替换一个单词? Sep 16, 2023 pm 10:21 PM

在Python中,我们可以使用一个名为openpyxl的第三方Python库将Excel中的一个单词替换为另一个单词。MicrosoftExcel是一个用于管理和分析数据的有用工具。使用Python,我们可以自动化一些Excel数据管理任务。在本文中,我们将了解如何使用Python在Excel中替换一个单词。安装openpyxl在Excel中替换Word之前,我们需要使用Python包管理器在系统中安装openpyxl库。要安装openpyxl,请在终端或命令提示符中输入以下命令。Pipinst

See all articles