使所有子字串不同的字串的最小更改
字串是一種特定的物件,它表示資料字元的序列和流。字串是資料容器,始終以文字格式表示。它還用於概念、比較、拆分、連線、替換、修剪、長度、內部化、相等、比較、子字串操作。substring() 是一種資料細化過程,它從起始位置到結束位置提取兩個位置之間儲存的資料。substring() 不會更改原始字串。在一個數據集中,當我們有不同的字元時,它們可以表示為不同的資料元素。例如:'a' 和 'r' 是不同的,而 'r' 和 'r' 是相同的。因此,一個字串,比如 orange,包含 6 個不同的字元。同樣,字串 apple 只包含 4 個不同的字元。
假設 "s" 是一個字串,我們需要找到對所有子字串進行更改以使其成為不同字串所需的最小更改次數。
字串長度 - 26
給定輸入 - T 是第一行上的測試用例,包含一個整數。對於每個測試用例,只有一行包含 26 個字元。
輸出 - 我們將獲得每個測試用例的最小更改次數。
邏輯方法過程的約束
1 <= T <= 100
1 <= |s| <= 26
在本文中,我們將學習如何對字串進行更改以使所有子字串都不同。
使子字串不同的演算法
以下是透過進行最小更改使字串的所有子字串都不同的可能演算法。
步驟 1 - 開始。
步驟 2 - 使用兩個巢狀迴圈生成子字串。
步驟 3 - 外部迴圈從 i = 0 到字串長度減 1。
步驟 4 - 內部迴圈從 j = 0 到字串長度減 1。
步驟 5 - 使用零值構建計數變數。
步驟 6 - 在外部迴圈內,建立一個 distinct_character 變數。
步驟 7 - 建立頻率陣列。
步驟 8 - 將所有元素設定為零。
步驟 9 - 檢查字串[j] - 'a' 的頻率是否為零。
步驟 10 - 如果為零,則將其遞增 1。
步驟 11 - 否則,將其分解成內部迴圈。
步驟 12 - 如果計數大於零,則返回計數。
步驟 13 - 否則,返回 -1。
步驟 14 - 終止。
建立所有不同子字串的語法
string.substring(start, end)
在此語法中,我們可以看到如何對字串進行最小更改以使所有子字串都不同。
引數
開始 - 需要宣告一個起始位置。這裡第一個字元位於索引 0。
結束 - 這是一個可選的過程,位於結束位置(直到但不包括)。
方法
方法 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 中建立了一些可能的程式碼。希望這將幫助您更全面地瞭解此主題。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP