Rentetan ialah jenis objek tertentu yang mewakili jujukan dan aliran aksara data. Rentetan ialah bekas data, sentiasa diwakili dalam format teks. Ia juga digunakan untuk operasi konseptual, perbandingan, belah, gabungkan, ganti, potong, panjang, dalaman, kesamaan, perbandingan dan subrentetan. substring() ialah proses penapisan data yang mengekstrak data antara data yang disimpan dari awal hingga akhir. substring() tidak mengubah rentetan asal. Dalam set data, apabila kita mempunyai aksara yang berbeza, ia boleh diwakili sebagai elemen data yang berbeza. Contohnya: 'a' dan 'r' adalah berbeza, manakala 'r' dan 'r' adalah sama. Jadi, rentetan katakan, oren mengandungi 6 aksara yang berbeza. Begitu juga, epal rentetan mengandungi hanya 4 aksara yang berbeza.
Andaikan, "s" ialah rentetan, dan kita perlu mencari bilangan minimum perubahan yang diperlukan untuk semua subrentetan untuk menjadikan rentetan itu berbeza.
Panjang tali - 26
Input yang diberikan − T ialah kes ujian bagi baris pertama, iaitu integer. Untuk setiap kes ujian, hanya akan ada satu baris yang mengandungi 26 aksara.
Output - Kami akan mendapat bilangan perubahan minimum untuk setiap kes ujian.
Kekangan aliran kaedah logik
1
1
Algoritma untuk membuat subrentetan berbeza
string.substring(start, end)
Cari bilangan minimum perubahan supaya semua subrentetan rentetan menjadi berbeza
Contoh 1: Menggunakan 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
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
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
Atas ialah kandungan terperinci Ubah suai rentetan secara minimum supaya semua subrentetan berbeza. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!