1. 程式人生 > >Leetcode 344:Reverse String 反轉字串(python、java)

Leetcode 344:Reverse String 反轉字串(python、java)

Leetcode 344:Reverse String 反轉字串

公眾號:愛寫bug Write a function that reverses a string. The input string is given as an array of characters char[].

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

You may assume all the characters consist of printable ascii characters

編寫一個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char[] 的形式給出。

不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列、使用 O(1) 的額外空間解決這一問題。

你可以假設陣列中的所有字元都是 ASCII 碼錶中的可列印字元。

Example 1:

Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Example 2:

Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]

解題思路:

​ 第一個字元與最後一個交換位置,繼而第二個與倒數第二個交換位置,一直交換到到中位數 結束。

程式碼:

Java:

class Solution {
    public void reverseString(char[] s) {
        char temp;
        for(int i=0,j=s.length-1;i<j;i++,j--){
            temp=s[i];
            s[i]=s[j];
            s[j]=temp;
        }
    }
}

Python3:

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        i = 0
        j = len(s) - 1
        while (i < j):
            s[i], s[j] = s[j], s[i]#交換賦值
            i+=1
            j-=1

其實py3有很多好玩的操作,比如這道題可以這樣:s=list(reversed(s)) 因為 reversed() 函式返回的是一個迭代器,所以要用 list() 函式才行。但是速度不快。

如果是字串反轉而不是陣列還可以這樣 s=s[::-1] (字串切片:string[start:stop:step]

總結:

這道題應當解釋雙指標問題最常引用的題目了,其思想是將第一個元素與末尾進行交換,再向前移動到下一個元素,並不斷地交換,直到它到達中間位置。

我們可以同時使用兩個指標來完成迭代:一個從第一個元素開始,另一個從最後一個元素開始。持續交換它們所指向的元素,直到這兩個指標相遇。

摘自Leetcode:

總之,使用雙指標技巧的典型場景之一是你想要

從兩端向中間迭代陣列。

這時你可以使用雙指標技巧:

一個指標從始端開始,而另一個指標從末端開始。

相關推薦

Leetcode 344Reverse String 反轉字串pythonjava

Leetcode 344:Reverse String 反轉字串 公眾號:愛寫bug Write a function that

LeetCode】87. Scramble String 解題報告Python & C++

作者: 負雪明燭 id: fuxuemingzhu 個人部落格: http://fuxuemingzhu.cn/ 目錄 題目描述 題目大意 解題方法 遞迴 動態規劃 日期

leetCode題目--反轉字串python實現

題目 編寫一個函式,其作用是將輸入的字串反轉過來。 示例 1: 輸入: "hello" 輸出: "olleh" 示例 2: 輸入: "A man, a plan, a canal: Panama" 輸出: "amanaP :lanac a ,

LeetCode題解Reverse String

Write a function that takes a string as input and returns the string reversed. Example: Given s = "hello", return "olleh". 思路: 當然可以用雙

LeetCode-344Reverse String(C++)

題目要求:寫一個函式,要求反轉字串,比如輸入“hello”,則輸出“olleh”。 解題思路:將字串的第一個和最後一個交換位置,第二個和倒數第二個交換位置……直到交換到字串的中間位置,則交換完畢。 實

LeetCode】680. 驗證迴文字串Valid Palindrome II

【 英文練習 | 中文練習 】 題目描述: 給定一個非空字串,最多刪除一個字元,判斷是否能成為迴文字串。 示例: 輸入: "abca" 輸出: True 解釋: 可以刪除c字元 public boolean validPalindrome(String s) {

Leetcode初級演算法 驗證迴文字串Python

問題描述: 給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。 說明:本題中,我們將空字串定義為有效的迴文串。   演算法思路: 首先,去除所有非字母和數字的字元,然後統一大小寫,再來進行比較。簡單的比較可以判斷反轉前後的字串是否相同。

劍指offer表示數值的字串Python

題目描述 請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示數值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。 解

構建微服務架構Spring Cloud服務註冊與發現EurekaConsul

comm 簡介 foundry 架構 eas args 包含 什麽 其他 Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全

LeetCode 3.無重複字元的最長子串C++java

本文非原創,參考連結:https://www.cnblogs.com/ariel-dreamland/p/8668286.html (因為這道題大多數部落格寫的是java的程式碼,找了挺久才找到這位小姐姐寫的部落格,C++的解法很全。感謝原作者小姐姐。之前找影象語義分割的部落格也是這位小姐姐的一篇部落格寫得

關於SpringCloud微服務雲架構構建B2B2C電子商務平臺分析服務註冊與發現EurekaConsul

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring

Spring Cloud構建微服務架構服務註冊與發現EurekaConsul

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring Cloud包含

ES6模板字串迴圈函式

相比ES5的拼接字串,ES6毫無疑問是簡單明瞭,又清晰可維護。原始的字串拼接真的是把整個人都拼傻,並且在處理的過程中會出現很多小坑,小問題。 $('#ulList').html(` <ul> <li>浙江</li>

Spring Boot + Spring Cloud 構建微服務系統分散式鏈路追蹤SleuthZipkin

技術背景 在微服務架構中,隨著業務發展,系統拆分導致系統呼叫鏈路愈發複雜,一個看似簡單的前端請求可能最終需要呼叫很多次後端服務才能完成,那麼當整個請求出現問題時,我們很難得知到底是哪個服務出了問題導致的,這時就需要解決一個問題,如何快速定位服務故障點,於是,分散式系統呼叫鏈追蹤技術就此誕生了。 ZipKin

LeetCode】174. Dungeon Game 解題報告Python & C++

作者: 負雪明燭 id: fuxuemingzhu 個人部落格: http://fuxuemingzhu.cn/ 目錄 題目描述 題目大意 解題方法 動態規劃 日期

Linux學習四劍客之二grepfind

linux四劍客 grep 查詢檔案內容 grep hello test.txt 在某個檔案中查詢包含hello的內容,只要一行中有hello會把整行顯示 grep -niv helle test.txt n顯示查詢到的內容行號,i查詢時不區分大小寫,v

Spring Data MongoDB 三基本文件查詢QueryBasicQuery

一.簡介      Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate對MongoDB的CRUD的操作,上一篇我們介紹了對MongoDB的新增和刪除, 今天我們

Notepad++一鍵編譯運行PythonJavaC++

nbsp cnblogs anaconda not ont tps -o d+ 命令 Python 需要事先安裝Python配置好環境變量。建議使用Anaconda,方便。 在Notepad按F5,輸入如下   cmd /k chdir /d $(CURRENT_DI

滑動視窗法演算法matlabjava

這是第一次寫博文,想加強自己對於這方面知識點的理解,雖然演算法很簡單,但是想把自己想法寫下來。 正好看到《劍指offer題目》面試題65:滑動視窗的最大值 給定⼀一個數組和滑動視窗的大⼩,找出所有滑動視窗⾥裡里數值的最⼤大值。例如,如果輸入陣列{2,3,4,2,6,2,5

priorityQueue優先順序佇列 pythonc++

優先順序佇列 優先順序佇列 佇列就是一個先進先出(FIFO)的結構,而優先順序佇列則是對佇列裡的每一個元素設定一個優先順序,取元素時先獲得優先順序最高的一個元素。在python和c++裡都有庫可以呼叫。(java裡應該也有,但是我不會java,所以算了吧。) 今