目錄
問題陳述
天真的方法
演算法(樸素)
C 程式碼(樸素)
Example
範例
輸出
高效的方法
演算法(高效)
C 程式碼(高效)
結論
首頁 後端開發 C++ 字串的最大分割長度,使得字串中的每個字元都出現在一個子字串中

字串的最大分割長度,使得字串中的每個字元都出現在一個子字串中

Aug 25, 2023 pm 02:41 PM
字串分割 字元全出現 最大長度

字串的最大分割長度,使得字串中的每個字元都出現在一個子字串中

在本文中,我們將探討如何找到具有唯一字元的字串的最大化分區的長度問題。我們首先了解問題陳述,然後研究解決這個問題的樸素和高效方法,包括它們各自的演算法和時間複雜度。最後,我們將在C 中實現解決方案。

問題陳述

給定一個字串,將字串分割成盡可能多的子字串,使得字串中的每個字元只出現在一個子字串中。傳回這些最大化分割的長度。

天真的方法

天真的方法是透過字串迭代,記錄每個字元的最後出現位置。然後,再次迭代字串,並在找到當前字元的最後出現位置時建立分區。

演算法(樸素)

  • 初始化一個陣列以儲存字串中每個字元的最後出現位置。

  • 遍歷字串並記錄每個字元的最後出現。

  • 初始化一個向量來儲存分割區的長度。

  • 再次遍歷字串,並在找到目前字元的最後出現時建立分割區。

C 程式碼(樸素)

Example

的中文翻譯為:

範例

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

std::vector<int> partitionLengths(std::string s) {
   std::vector<int> lastOccurrence(26, -1);
   
   for (size_t i = 0; i < s.size(); i++) {
      lastOccurrence[s[i] - 'a'] = i;
   }
   
   std::vector<int> partitionLengths;
   int start = 0, end = 0;
   
   for (size_t i = 0; i < s.size(); i++) {
      end = std::max(end, lastOccurrence[s[i] - 'a']);
      if (i == end) {
         partitionLengths.push_back(end - start + 1);
         start = i + 1;
      }
   }
   
   return partitionLengths;
}

int main() {
   std::string s = "abacdc";
   std::vector<int> lengths = partitionLengths(s);
   
   std::cout << "Lengths of maximized partitions: ";
   for (int length : lengths) {
      std::cout << length << " ";
   }
   
   return 0;
}
登入後複製

輸出

Lengths of maximized partitions: 3 3 
登入後複製
登入後複製

時間複雜度(樸素演算法) - O(n),其中n是字串的長度。

高效的方法

高效的方法類似於簡單的方法,但我們可以建立分區,同時記錄單次迭代中每個字元的最後一次出現,而不是迭代字串兩次。

演算法(高效)

  • 初始化一個陣列以儲存字串中每個字元的最後出現位置。

  • 初始化一個向量來儲存分割區的長度。

  • 遍歷字串,記錄每個字元的最後出現位置,並在找到目前字元的最後出現位置時建立分區。

C 程式碼(高效)

範例

#
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

std::vector<int> partitionLengths(std::string s) {
   std::vector<int> lastOccurrence(26, -1);
   std::vector<int> partitionLengths;
   int start = 0, end = 0;
   
   for (size_t i = 0; i < s.size(); i++) {
      lastOccurrence[s[i] - 'a'] = i;
   }
   
   for (size_t i = 0; i < s.size(); i++) {
      end = std::max(end, lastOccurrence[s[i] - 'a']);
   
      if (i == end) {
         partitionLengths.push_back(end - start + 1);
         start = i + 1;
      }
   }
   
   return partitionLengths;
}

int main() {
   std::string s = "abacdc";
   std::vector<int> lengths = partitionLengths(s);
   
   std::cout << "Lengths of maximized partitions: ";
   for (int length : lengths) {
      std::cout << length << " ";
   }
   
   return 0;
}
登入後複製

輸出

Lengths of maximized partitions: 3 3 
登入後複製
登入後複製

時間複雜度(高效) - O(n),其中 n 是字串的長度。

結論

在本文中,我們探討了尋找具有唯一字元的字串的最大化分區長度的問題。我們討論了解決這個問題的簡單而有效的方法,以及它們的演算法和時間複雜度。這種有效的方法結合了記錄每個字元的最後一次出現和在單次迭代中建立分區,提供了最佳化的解決方案。兩種方法具有相同的時間複雜度,但有效的方法使用較少的迭代。

以上是字串的最大分割長度,使得字串中的每個字元都出現在一個子字串中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python 3.x 中如何使用split()函數將字串依照指定分隔符號分割 Python 3.x 中如何使用split()函數將字串依照指定分隔符號分割 Jul 31, 2023 pm 08:33 PM

Python是一種流行的程式語言,它提供了許多內建函數來處理字串。其中一個常用的函數是split()函數,可以依照指定的分隔符號將字串分割成多個子字串。本文將介紹如何在Python3.x中使用split()函數。在Python中,split()函數是字串類別的一個內建函數,它的基本語法如下:string.split(separator,maxsplit)

字串的最大分割長度,使得字串中的每個字元都出現在一個子字串中 字串的最大分割長度,使得字串中的每個字元都出現在一個子字串中 Aug 25, 2023 pm 02:41 PM

在本文中,我們將探討如何找到具有唯一字元的字串的最大化分區的長度問題。我們首先了解問題陳述,然後研究解決這個問題的樸素和高效方法,包括它們各自的演算法和時間複雜度。最後,我們將在C++中實作解決方案。問題陳述給定一個字串,將字串分割為盡可能多的子字串,使得字串中的每個字元只出現在一個子字串中。傳回這些最大化分割的長度。天真的方法天真的方法是透過字串迭代,記錄每個字元的最後出現位置。然後,再次迭代字串,並在找到當前字元的最後出現位置時建立分區。演算法(樸素)初始化一個陣列以儲存字串中

PHP中如何使用explode函數分割字串 PHP中如何使用explode函數分割字串 Jun 26, 2023 pm 12:03 PM

在PHP語言中,有許多基礎函數可以幫助我們快速有效地處理字串。其中,explode函數是一個很實用的字串分割函數。它可以將一個字串依照指定的分割符分割成數組,進而進行更靈活的字串操作。在本文中,我們將會介紹PHP中如何使用explode函數來分割字串。一、explode函數格式explode函數在PHP語言的格式如下:explode(separa

如何在PHP中將字串分割為數組 如何在PHP中將字串分割為數組 Jul 08, 2023 pm 01:49 PM

如何在PHP中將字串分割為陣列在PHP中,我們經常需要處理字串,並將其拆分為多個部分。將字串分割為陣列是一種常見的操作,可以幫助我們更好地處理字串的各個部分。在本文中,我們將學習如何使用PHP中的函數將字串分割為數組,並提供一些程式碼範例。使用explode函數將字串分割成陣列PHP提供了一個名為explode的函數,可以將字串依照指定的分隔符號進

計算將字串分割為以偶數開頭且最小長度為M的K個子字串的方法數 計算將字串分割為以偶數開頭且最小長度為M的K個子字串的方法數 Sep 09, 2023 pm 02:01 PM

在這個問題中,我們將計算將給定的字串劃分為K個子字串的方法,使其滿足問題陳述中給出的條件。我們將使用遞歸來解決這個問題。此外,我們還將使用表格動態規劃方法來有效解決這個問題。問題陳述−我們有一個名為bin_Str的特定長度的字串。該字串只包含從'0'到'9'的數字字元。我們需要計算將字串分割成K個子字串的方式數,使其滿足以下條件。子字串應至少包含2個字元。每個子字串的第一個字元應為偶數,最後一個字元應為奇數。範例範例輸入M=2,K=2;bin_str="255687&q

PHP字串函數實例:字串分割 PHP字串函數實例:字串分割 Jun 20, 2023 pm 01:58 PM

PHP中有許多字串函數,其中字串分割函數是非常常用的。字串分割函數可以將字串依照指定的分隔符號分割,並傳回一個陣列。下面我們就來介紹幾個常用的字串分割函數。 explode函數explode函數可以將字串依照指定的分隔符號分割,並傳回一個陣列。其語法如下:explode(string$separator,string$string

解PHP中explode函數報錯的方法 解PHP中explode函數報錯的方法 Mar 11, 2024 am 11:45 AM

解決PHP中explode函數報錯的方法,需要具體程式碼範例在PHP中,explode函數是用來將字串依照指定的分隔符號拆分成數組的函數。然而,有時在使用explode函數時會出現報錯的情況,主要是因為傳入的參數不符合函數的要求所導致的。以下我們將針對可能出現的問題和解決方法進行詳細討論,並提供具體的程式碼範例。參數個數錯誤導致的錯誤當使用explode函數

檢查一個字串是否可以分割成三個子字串,其中一個子字串是另外兩個子字串的子字串 檢查一個字串是否可以分割成三個子字串,其中一個子字串是另外兩個子字串的子字串 Sep 22, 2023 am 11:53 AM

在這個問題中,我們需要分割給定的字串,使得第三個子字串可以是前兩個子字串的子字串。讓我們想想解決辦法。僅當兩個字串包含第三個字串的所有字元時,第三個字串才可以是前兩個字串的子字串。所以,我們需要在給定的字串中找到至少一個出現頻率大於3的字符,並且我們可以取該單一字符的第三個子串。問題陳述-我們給了一個包含N個小寫字母字元的字串str。我們需要檢查是否可以將字串拆分為三個子字串a、b和c,使得子字串c是a和b的子字串。根據是否能找到3個子串,印出“yes”或“no

See all articles