首页 >后端开发 >C++ >最小改动字符串使得所有子字符串都不相同

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

王林
王林转载
2023-09-04 14:49:07687浏览

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

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

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

  • 字符串的长度 - 26

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

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

  • 逻辑方法流程的约束

    • 1

    • 1

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

使子字符串不同的算法

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

  • 第一步-开始。

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

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

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

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

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

  • 第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 <bits/stdc++.h>
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中遵循所述算法创建了一些可能的代码。希望这能帮助您对这个主题有一个更全面的了解。

以上是最小改动字符串使得所有子字符串都不相同的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:tutorialspoint.com。如有侵权,请联系admin@php.cn删除