0

0

最小改动字符串使得所有子字符串都不相同

王林

王林

发布时间:2023-09-04 14:49:07

|

806人浏览过

|

来源于tutorialspoint

转载

最小改动字符串使得所有子字符串都不相同

字符串是一种特定的对象,它表示数据字符的序列和流动。字符串是一种数据容器,总是以文本格式表示。它还用于概念、比较、拆分、连接、替换、修剪、长度、内部化、相等、比较和子字符串操作。子字符串()是一种数据精炼过程,它从开始到结束提取保存的数据之间的数据。子字符串()不会改变原始字符串。在数据集中,当我们有不同的字符时,它们可以被表示为不同的数据元素。例如:'a'和'r'是不同的,而'r'和'r'是相同的。所以,一个字符串比如说,橙子包含6个不同的字符。同样,字符串苹果只包含4个不同的字符。

假设,"s" 是一个字符串,我们需要找到所有子字符串所需的最小改变次数,以使字符串变得不同。

  • 字符串的长度 - 26

  • 给定输入− T 是第一行的测试用例,为一个整数。对于每个测试用例,只会有一行包含26个字符。

  • 输出 - 我们将获得每个测试用例的最小变化次数。

  • 逻辑方法流程的约束

    • 1

    • 1

在今天的文章中,我们将学习如何修改字符串以使所有子字符串都不同。

使子字符串不同的算法

这是一种可能的算法,用于对字符串进行操作,使得所有子字符串都是不同的,同时尽量减少改动。

  • 第一步-开始。

  • 第二步− 使用两个嵌套循环来生成子字符串。

  • 第三步 - 外循环从 i = 0,字符串长度减1。

  • 第4步 - 内循环从 j = 0,字符串长度减1。

  • 第五步− 使用零值构建计数变量。

  • 第6步− 在外部循环内部,创建一个distinct_character变量。

    HeyGen
    HeyGen

    HeyGen是一个AI虚拟数字人生成平台,可以根据用户提供的内容,快速生成高质量的虚拟发言人视频,支持数字化身、文本转视频和视频翻译。

    下载
  • 第7步-创建频率数组。

  • Step 8− Set all elements zero.

  • 第9步 - 检查字符串[j] - 'a'的频率是否为零。

  • 步骤10− 如果为零,则将其增加1。

  • 步骤11− 否则,将其分解为内部循环。

  • 第12步- 如果计数大于零,则返回计数。

  • 第13步- 否则,返回-1。

  • 第14步- 终止。

创建所有不同子字符串的语法

string.substring(start, end)

在这个语法中,我们可以看到如何对一个字符串进行最小的更改,使得所有的子字符串都不相同。

  • 参数

    • 开始 - 需要声明一个起始位置。这里的第一个字符的索引是0。

    • End − 它是一个可选的过程,位于结束位置(包括但不限于)。

方法

方法1−找到使字符串的所有子字符串都变为不同的最小更改次数。

找到最小的更改次数,使得字符串的所有子串都变得不同

在这个方法中,我们将学习如何使所有的子字符串都不同。在这里,每个字符都必须不同。我们只需要找出字符的数量。如果字符串的长度超过26,则我们只需要将其转换为一个字符串。在这里,我们将在不同的语言环境中编写相同的逻辑。

示例1:使用C++

#include 
using namespace std;
const int MAX_CHAR = 26;
int minChanges(string &str) {
   int n = str.length();
   if (n > MAX_CHAR)
   return -1;
   int dist_count = 0;
   int count[MAX_CHAR] = {0};
   for (int i = 0; i < n; i++) {
      if (count[str[i] - 'a'] == 0)
      dist_count++;
      count[(str[i] - 'a')]++;
   }
   return (n - dist_count);
}
int main() {
   string str = "aebaecedabbeedee";
   cout << minChanges(str);
   return 0;
}

输出

11

例子2:通过使用Java

import java.lang.*;
import java.util.*;
public class tutorialspoint {
   static final int MAX_CHAR = 26;
   public static int minChanges(String str) {
      int n = str.length();
      if (n > MAX_CHAR)
      return -1;
      int dist_count = 0;
      int count[] = new int[MAX_CHAR];
      for(int i = 0; i < MAX_CHAR; i++)
      count[i] = 0;
      for (int i = 0; i < n; i++) {
         if(count[str.charAt(i)-'a'] == 0)
         dist_count++;
         count[str.charAt(i)-'a']++;
      }
      return (n-dist_count);
   }
   public static void main (String[] args) {
      String str = "aebaecedabbeedee";
      System.out.println(minChanges(str));
   }
}

输出

11

示例1:使用Python

MAX_CHAR = [26]
def minChanges(str):

	n = len(str )
	if (n > MAX_CHAR[0]):
		return -1
	dist_count = 0
	count = [0] * MAX_CHAR[0]

	for i in range(n):
		if (count[ord(str[i]) - ord('a')] == 0) :
			dist_count += 1
		count[(ord(str[i]) - ord('a'))] += 1
	return (n - dist_count)
if __name__ == '__main__':
	str = "aebaecedabbeedee"
	print(minChanges(str))
	

输出

11

结论

今天,在本文中,我们学习了如何通过最小的改变使所有子字符串都不同。在这里,我们通过在C++、Java和Python中遵循所述算法创建了一些可能的代码。希望这能帮助您对这个主题有一个更全面的了解。

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

3

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

30

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

2

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

3

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号