'LeetCode基礎算法題第130篇:反轉字符串 II'

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

LeetCode基礎算法題第130篇:反轉字符串 II

代碼14~16行復制字符串s給res,對res進行操作,避免修改s。

代碼18~19行,表裡按照步長k遍歷字符串res。

每一循環,判斷當前劃分是否是偶劃分,如果是對res中改區域的邏輯劃分執行翻轉操作。

函數resverse,對字符串中某一區域執行做反轉操作。

這裡注意right值的取值是取邏輯劃分邊界和字符下標的最小值。

反轉的方式是對邏輯劃分的字符子串不斷的進行左右字符的交換,這裡定義了一個宏SWP來完成這個工作。

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

LeetCode基礎算法題第130篇:反轉字符串 II

代碼14~16行復制字符串s給res,對res進行操作,避免修改s。

代碼18~19行,表裡按照步長k遍歷字符串res。

每一循環,判斷當前劃分是否是偶劃分,如果是對res中改區域的邏輯劃分執行翻轉操作。

函數resverse,對字符串中某一區域執行做反轉操作。

這裡注意right值的取值是取邏輯劃分邊界和字符下標的最小值。

反轉的方式是對邏輯劃分的字符子串不斷的進行左右字符的交換,這裡定義了一個宏SWP來完成這個工作。

LeetCode基礎算法題第130篇:反轉字符串 II

Java語言實現:

Java 的實現和C語言的實現基本一致,不再撰述。代碼如下:

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

LeetCode基礎算法題第130篇:反轉字符串 II

代碼14~16行復制字符串s給res,對res進行操作,避免修改s。

代碼18~19行,表裡按照步長k遍歷字符串res。

每一循環,判斷當前劃分是否是偶劃分,如果是對res中改區域的邏輯劃分執行翻轉操作。

函數resverse,對字符串中某一區域執行做反轉操作。

這裡注意right值的取值是取邏輯劃分邊界和字符下標的最小值。

反轉的方式是對邏輯劃分的字符子串不斷的進行左右字符的交換,這裡定義了一個宏SWP來完成這個工作。

LeetCode基礎算法題第130篇:反轉字符串 II

Java語言實現:

Java 的實現和C語言的實現基本一致,不再撰述。代碼如下:

LeetCode基礎算法題第130篇:反轉字符串 II

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

LeetCode基礎算法題第130篇:反轉字符串 II

代碼14~16行復制字符串s給res,對res進行操作,避免修改s。

代碼18~19行,表裡按照步長k遍歷字符串res。

每一循環,判斷當前劃分是否是偶劃分,如果是對res中改區域的邏輯劃分執行翻轉操作。

函數resverse,對字符串中某一區域執行做反轉操作。

這裡注意right值的取值是取邏輯劃分邊界和字符下標的最小值。

反轉的方式是對邏輯劃分的字符子串不斷的進行左右字符的交換,這裡定義了一個宏SWP來完成這個工作。

LeetCode基礎算法題第130篇:反轉字符串 II

Java語言實現:

Java 的實現和C語言的實現基本一致,不再撰述。代碼如下:

LeetCode基礎算法題第130篇:反轉字符串 II

LeetCode基礎算法題第130篇:反轉字符串 II

Python語言實現:

當然你依然可以用上面的方法,只是你要通過判斷奇偶劃分來確定是否要反轉。

由於python切片沒有溢出的問題,所以根據題目描述的k與2k的關係,對於python來說可以方便的實現算法。

代碼如下:

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

LeetCode基礎算法題第130篇:反轉字符串 II

代碼14~16行復制字符串s給res,對res進行操作,避免修改s。

代碼18~19行,表裡按照步長k遍歷字符串res。

每一循環,判斷當前劃分是否是偶劃分,如果是對res中改區域的邏輯劃分執行翻轉操作。

函數resverse,對字符串中某一區域執行做反轉操作。

這裡注意right值的取值是取邏輯劃分邊界和字符下標的最小值。

反轉的方式是對邏輯劃分的字符子串不斷的進行左右字符的交換,這裡定義了一個宏SWP來完成這個工作。

LeetCode基礎算法題第130篇:反轉字符串 II

Java語言實現:

Java 的實現和C語言的實現基本一致,不再撰述。代碼如下:

LeetCode基礎算法題第130篇:反轉字符串 II

LeetCode基礎算法題第130篇:反轉字符串 II

Python語言實現:

當然你依然可以用上面的方法,只是你要通過判斷奇偶劃分來確定是否要反轉。

由於python切片沒有溢出的問題,所以根據題目描述的k與2k的關係,對於python來說可以方便的實現算法。

代碼如下:

LeetCode基礎算法題第130篇:反轉字符串 II

"

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

我會持續分享下去,敬請您的關注。

LeetCode 541. 反轉字符串 II(Reverse String II)

問題描述:

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

注:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

示例:

LeetCode基礎算法題第130篇:反轉字符串 II

C語言實現:

我覺得LeetCode提供的示例不能清晰反映這個問題,所以我給了一個新的示例,這是當k=3的時候,不同的s值,reverseStr函數返回的結果:

LeetCode基礎算法題第130篇:反轉字符串 II

(注意圖中標註紅綠色的都是要進行反轉的,之說以標註不同,是因為是在不同的劃分中。)

根據如上圖的觀察,我們會發現,這個題目實際上是要實現:

  1. 從s的左邊開始,按步長為k,將字符串劃分成多個邏輯部分;
  2. 若將每次的劃分用下標標註的話(起始下標是0),那麼對偶數下標的劃分做反轉操作,奇數下標不做任何變化。

如此我們就可得出如下的算法:

LeetCode基礎算法題第130篇:反轉字符串 II

代碼14~16行復制字符串s給res,對res進行操作,避免修改s。

代碼18~19行,表裡按照步長k遍歷字符串res。

每一循環,判斷當前劃分是否是偶劃分,如果是對res中改區域的邏輯劃分執行翻轉操作。

函數resverse,對字符串中某一區域執行做反轉操作。

這裡注意right值的取值是取邏輯劃分邊界和字符下標的最小值。

反轉的方式是對邏輯劃分的字符子串不斷的進行左右字符的交換,這裡定義了一個宏SWP來完成這個工作。

LeetCode基礎算法題第130篇:反轉字符串 II

Java語言實現:

Java 的實現和C語言的實現基本一致,不再撰述。代碼如下:

LeetCode基礎算法題第130篇:反轉字符串 II

LeetCode基礎算法題第130篇:反轉字符串 II

Python語言實現:

當然你依然可以用上面的方法,只是你要通過判斷奇偶劃分來確定是否要反轉。

由於python切片沒有溢出的問題,所以根據題目描述的k與2k的關係,對於python來說可以方便的實現算法。

代碼如下:

LeetCode基礎算法題第130篇:反轉字符串 II

LeetCode基礎算法題第130篇:反轉字符串 II


謝謝大家一直以來的關注和支持!

我一直在努力的寫好每一篇文章,畫好每一份插圖。但是作為一個996從業人員,時間精力十分有限。所以針對評論部分,以後只回答粉絲的問題和私信。希望僅僅是路過的朋友能夠體諒,希望更多人關注《吾是我師》,謝謝!


"

相關推薦

推薦中...