Rumah > pembangunan bahagian belakang > C++ > Subrentetan terpanjang di mana aksara bersebelahan tidak mempunyai huruf Inggeris bersebelahan

Subrentetan terpanjang di mana aksara bersebelahan tidak mempunyai huruf Inggeris bersebelahan

PHPz
Lepaskan: 2023-09-11 15:49:02
ke hadapan
866 orang telah melayarinya

Subrentetan terpanjang di mana aksara bersebelahan tidak mempunyai huruf Inggeris bersebelahan

Dalam bidang manipulasi rentetan, mengenal pasti corak dan mengekstrak subrentetan yang bermakna adalah tugas biasa. Masalah menarik melibatkan mencari subrentetan terpanjang di mana tiada aksara bersebelahan adalah huruf Inggeris bersebelahan. Dalam artikel ini, kami akan menyelidiki penyelesaian yang cekap untuk masalah ini menggunakan C++ dan memberikan penjelasan yang jelas serta contoh kes ujian.

Pernyataan Masalah

Memandangkan rentetan huruf Inggeris huruf kecil, kita perlu mencari panjang subrentetan terpanjang di mana tiada aksara bersebelahan adalah huruf Inggeris bersebelahan. Contohnya, dalam rentetan "abacabx", subrentetan terpanjang yang memenuhi syarat ini ialah "abx", dengan panjang 3.

Kaedah dan Algoritma

Untuk menyelesaikan masalah ini, kita boleh menggunakan kaedah tamak. Kami akan mengulangi rentetan yang diberikan dan menyemak sama ada aksara semasa dan aksara sebelumnya adalah huruf Inggeris bersebelahan. Jika ya, kita mulakan subrentetan baharu. Jika tidak, kami mengembangkan subrentetan sedia ada. Dengan mengemas kini subrentetan terpanjang setiap kali panjangnya melebihi maksimum sebelumnya, kita boleh mencari hasil yang diingini.

Pelaksanaan C++

Ini adalah kod C++ yang menyelesaikan masalah &tolak,

#include <iostream>
#include <string>
using namespace std;

int findLongestSubstring(const string& str) {
   int maxLength = 0;
   int currentLength = 1;
   
   for (int i = 1; i < str.length(); i++) {
      if (abs(str[i] - str[i - 1]) != 1) {
         currentLength++;
      } else {
         maxLength = max(maxLength, currentLength);
         currentLength = 1;
      }
   }
   
   maxLength = max(maxLength, currentLength);
    return maxLength;
}

int main() {
   string inputString = "abacabx";
   int longestSubstringLength = findLongestSubstring(inputString);
   
   cout << "Longest substring length: " << longestSubstringLength << endl;
   
   return 0;
}
Salin selepas log masuk

Output

Longest substring length: 3
Salin selepas log masuk

Penjelasan kod

Fungsi findLongestSubstring menerima rentetan input sebagai parameter dan mengembalikan panjang subrentetan terpanjang bagi aksara abjad Inggeris bukan bersebelahan.

Kami memulakan maxLength dan currentLength masing-masing kepada 0 dan 1. Kemudian kami mengulangi rentetan bermula dari aksara kedua. Jika perbezaan mutlak antara aksara semasa dan aksara sebelumnya tidak sama dengan 1, Panjang semasa dinaikkan untuk memanjangkan subrentetan semasa. Jika tidak, jika panjang semasa melebihi maksimum sebelumnya, kami mengemas kini maxLength dan menetapkan semula currentLength kepada 1.

Akhir sekali, kami mengembalikan panjang maksimum yang ditemui. Dalam fungsi utama, kami menyediakan rentetan input sampel "abacabx" dan mencetak panjang subrentetan terpanjang.

Contoh kes ujian

Mari kita pertimbangkan contoh rentetan "abacabx" untuk menunjukkan penyelesaian kami.

Masuk

string inputString = "abacabx";
Salin selepas log masuk

Dalam contoh ini, subrentetan terpanjang tanpa aksara abjad Inggeris bersebelahan ialah "abx", dengan panjang 3.

Kesimpulan

Dengan menggunakan kaedah yang mudah dan cekap, kami berjaya menyelesaikan masalah mencari subrentetan huruf Inggeris bukan bersebelahan terpanjang menggunakan C++. Memahami kod dan penjelasan yang diberikan akan membolehkan anda menyelesaikan masalah serupa yang melibatkan manipulasi rentetan.

Atas ialah kandungan terperinci Subrentetan terpanjang di mana aksara bersebelahan tidak mempunyai huruf Inggeris bersebelahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan