亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java之左旋轉字符串介紹

 更新時間:2013年02月25日 20:44:26   作者:  
java之左旋轉字符串介紹,需要的朋友可以參考一下

題目:定義字符串的左旋轉操作:把字符串前面的若干個字符移動到字符串的尾部。如把字符串a(chǎn)bcdef左旋轉2位得到字符串cdefab。請實現(xiàn)字符串左旋轉的函數(shù)。要求時間對長度為n的字符串操作的復雜度為O(n),輔助內(nèi)存為O(1)。

分析:如果不考慮時間和空間復雜度的限制,最簡單的方法莫過于把這道題看成是把字符串分成前后兩部分,通過旋轉操作把這兩個部分交換位置。于是我們可以新開辟一塊長度為n+1的輔助空間,把原字符串后半部分拷貝到新空間的前半部分,在把原字符串的前半部分拷貝到新空間的后半部分。不難看出,這種思路的時間復雜度是O(n),需要的輔助空間也是O(n)。

接下來的一種思路可能要稍微麻煩一點。我們假設把字符串左旋轉m位。于是我們先把第0個字符保存起來,把第m個字符放到第0個的位置,在把第2m個字符放到第m個的位置…依次類推,一直移動到最后一個可以移動字符,最后在把原來的第0個字符放到剛才移動的位置上。接著把第1個字符保存起來,把第m+1個元素移動到第1個位置…重復前面處理第0個字符的步驟,直到處理完前面的m個字符。

該思路還是比較容易理解,但當字符串的長度n不是m的整數(shù)倍的時候,寫程序會有些麻煩,感興趣的朋友可以自己試一下。由于下面還要介紹更好的方法,這種思路的代碼我就不提供了。

我們還是把字符串看成有兩段組成的,記位XY。左旋轉相當于要把字符串XY變成YX。我們先在字符串上定義一種翻轉的操作,就是翻轉字符串中字符的先后順序。把X翻轉后記為XT。顯然有(XT)T=X。

我們首先對X和Y兩段分別進行翻轉操作,這樣就能得到XTYT。接著再對XTYT進行翻轉操作,得到(XTYT)T=(YT)T(XT)T=YX。正好是我們期待的結果。

分析到這里我們再回到原來的題目。我們要做的僅僅是把字符串分成兩段,第一段為前面m個字符,其余的字符分到第二段。再定義一個翻轉字符串的函數(shù),按照前面的步驟翻轉三次就行了。時間復雜度和空間復雜度都合乎要求。

復制代碼 代碼如下:

public class Test_21 {
 public static void main(String[] args){
  StringBuilder str = new StringBuilder("abcde");
  int index =5;
  System.out.println(LeftTurn(str,index));
 }
 public static String LeftTurn(StringBuilder sb,int index){
  int strlen = sb.length();
  if(sb !=null&&index>=0&&index<=strlen){
   int firststart = 0;
   int firstend = index-1;
   int secondfirst = index;
   int secondend = strlen-1;

   

    
    ReverseString(sb,firststart,firstend);
    ReverseString(sb,secondfirst, secondend);
    ReverseString(sb,firststart,secondend);

   
   return sb.toString();
  }
  return null;

 }
 public static void ReverseString(StringBuilder str,int begin, int end){

  while(begin<=end){
   char temp = str.charAt(begin);
   str.setCharAt(begin, str.charAt(end));
   str.setCharAt(end, temp);
   begin++;
   end--;
  }
  System.out.println(str);
 }

}

相關文章

  • 詳解Java中方法重寫與重載的區(qū)別(面試高頻問點)

    詳解Java中方法重寫與重載的區(qū)別(面試高頻問點)

    這篇文章主要介紹了Java中方法重寫與重載的區(qū)別(面試高頻問點),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 詳解Java編程中線程同步以及定時啟動線程的方法

    詳解Java編程中線程同步以及定時啟動線程的方法

    這篇文章主要介紹了詳解Java編程中線程同步以及定時啟動線程的方法, 講到了wait()與notify()方法以及阻塞隊列等知識,需要的朋友可以參考下
    2016-01-01
  • Java 基礎語法

    Java 基礎語法

    這篇文章主要介紹了Java 基礎語法,Java 是一門面向?qū)ο蟮慕忉屝途幊陶Z言,面向?qū)ο?意味著我們應該把一個 Java 程序看作一系列對象的集合,我們的工作就是構建這些對象,并通過調(diào)用彼此的方法來讓各種對象協(xié)同工作,解決實際的問題,下面文章內(nèi)容需要的朋友可以參考下一
    2021-11-11
  • Java死鎖代碼實例及產(chǎn)生死鎖必備的四個條件

    Java死鎖代碼實例及產(chǎn)生死鎖必備的四個條件

    這篇文章主要介紹了Java死鎖代碼實例及產(chǎn)生死鎖必備的四個條件,Java 發(fā)生死鎖的根本原因是,在申請鎖時發(fā)生了交叉閉環(huán)申請,synchronized在開發(fā)中最好不要嵌套使用,容易導致死鎖,需要的朋友可以參考下
    2024-01-01
  • IDEA下使用MyBatisCodeHelper插件的方法詳解

    IDEA下使用MyBatisCodeHelper插件的方法詳解

    這篇文章主要介紹了IDEA下使用MyBatisCodeHelper插件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot啟動yaml報錯的解決

    SpringBoot啟動yaml報錯的解決

    這篇文章主要介紹了SpringBoot啟動yaml報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java集合框架之Map詳解

    Java集合框架之Map詳解

    這篇文章主要為大家詳細介紹了Java集合框架之Map,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 巧妙的利用Mongodb做地理空間查詢

    巧妙的利用Mongodb做地理空間查詢

    本篇文章將會以Mongodb為數(shù)據(jù)庫,講述如何在數(shù)據(jù)庫層級進行定位查詢。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • springboot 錯誤處理小結

    springboot 錯誤處理小結

    在 java web開發(fā)過程中,難免會有一些系統(tǒng)異?;蛉藶楫a(chǎn)生一些異常。在 RESTful springboot 項目中如何優(yōu)雅的處理?下面腳本之家小編給大家?guī)砹藄pringboot 錯誤處理小結,感興趣的朋友一起看看吧
    2018-03-03
  • java 輸入某年某月某日,判斷這一天是這一年的第幾天

    java 輸入某年某月某日,判斷這一天是這一年的第幾天

    這篇文章主要介紹了java 輸入某年某月某日,判斷這一天是這一年的第幾天,需要的朋友可以參考下
    2017-02-02

最新評論