最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)左旋轉(zhuǎn)字符串

 更新時間:2019年03月03日 15:31:42   作者:雨幕下的稻田  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)左旋轉(zhuǎn)字符串,具有一定的參考價值,感興趣的小伙伴們可以參考一下

匯編語言中有一種移位指令叫做循環(huán)左移(ROL),現(xiàn)在有個簡單的任務(wù),就是用字符串模擬這個指令的運(yùn)算結(jié)果。對于一個給定的字符序列S,請你把其循環(huán)左移K位后的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環(huán)左移3位后的結(jié)果,即“XYZdefabc”。是不是很簡單?OK,搞定它!

代碼

解法一

最直觀的方式,依次將需要移位的字符移動至最后,但是每個字符都需要移動數(shù)組的長度-1,如果數(shù)組的長度是n,需要移k位,則總共需要移動 k * (n - 1)

public static String leftRotateString(String str, int n) {
    if (Strings.isNullOrEmpty(str)) {
      return str;
    }
    if (n < 0 || n >= str.length()) {
      return str;
    }
    char[] strArray = str.toCharArray();
    while (n-- > 0){
      // 直接交換的方式,將需要移位的部分通過交換n-1次向左移動
      // 比如abcde,要移動2位,即cdead
      // 1. 將a移動至最后,此時是bcdea
      // 2. 將b移動至最后,此時是cdeab
      for (int i = 0; i < strArray.length - 1; i++) {
        swap(strArray, i, i + 1);
      }
    }
    return new String(strArray);
  }
 
  private static void swap(char[] str, int i, int j) {
    char temp = str[i];
    str[i] = str[j];
    str[j] = temp;
  }


解法二

借助字符串的反轉(zhuǎn),比如“ab”對應(yīng)“ba”,“xyz”對應(yīng)“zyx”,總共需要三步即可得到期望想過

  • 反轉(zhuǎn)要移位的部分,”abcXYZdef”操作后是”cbaXYZdef”
  • 反轉(zhuǎn)其余的部分,”cbaXYZdef”操作后是”cbafedZYX”
  • 反轉(zhuǎn)整個字符串,”cbafedZYX”操作后是”XYZdefabc”
public static String leftRotateString2(String str, int n) {
    if (Strings.isNullOrEmpty(str)) {
      return str;
    }
    if (n < 0 || n >= str.length()) {
      return str;
    }
    char[] strArray = str.toCharArray();
    // 借助反轉(zhuǎn),分三步
    // 1. 反轉(zhuǎn)要移位的部分
    // 2. 反轉(zhuǎn)其余部分
    // 3. 整體反轉(zhuǎn)
    reverse(strArray, 0, n - 1);
    reverse(strArray, n, strArray.length - 1);
    reverse(strArray, 0, strArray.length - 1);
    return new String(strArray);
  }
 
  /**
   * 反轉(zhuǎn)字符串,兩端依次進(jìn)行交換即完成反轉(zhuǎn)
   * @param str
   * @param start
   * @param end
   */
  private static void reverse(char[] str, int start, int end) {
    while (start < end) {
      swap(str, start, end);
      start++;
      end--;
    }
  }
 
  private static void swap(char[] str, int i, int j) {
    char temp = str[i];
    str[i] = str[j];
    str[j] = temp;
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 為Java應(yīng)用創(chuàng)建Docker鏡像的3種方式總結(jié)

    為Java應(yīng)用創(chuàng)建Docker鏡像的3種方式總結(jié)

    Docker的使用可以將應(yīng)用程序做成鏡像,這樣可以將鏡像發(fā)布到私有或者公有倉庫中,在其他主機(jī)上也可以pull鏡像,并且運(yùn)行容器,運(yùn)行程,下面這篇文章主要給大家總結(jié)介紹了關(guān)于為Java應(yīng)用創(chuàng)建Docker鏡像的3種方式,需要的朋友可以參考下
    2023-06-06
  • Java實(shí)現(xiàn)Treap樹的示例代碼

    Java實(shí)現(xiàn)Treap樹的示例代碼

    本文主要介紹了Java實(shí)現(xiàn)Treap樹的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 使用java實(shí)現(xiàn)銀行家算法

    使用java實(shí)現(xiàn)銀行家算法

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)銀行家算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 一文講解Java的String、StringBuffer和StringBuilder的使用與區(qū)別

    一文講解Java的String、StringBuffer和StringBuilder的使用與區(qū)別

    String是不可變的字符序列,而StringBuffer和StringBuilder是可變的字符序列,本文就來詳細(xì)的介紹一下Java的String、StringBuffer和StringBuilder的使用與區(qū)別,感興趣的可以了解一下
    2024-03-03
  • Java實(shí)現(xiàn)DBF文件讀寫操作的完整指南

    Java實(shí)現(xiàn)DBF文件讀寫操作的完整指南

    DBF是一種數(shù)據(jù)庫文件格式,主要存儲結(jié)構(gòu)化數(shù)據(jù),本文將詳細(xì)介紹如何在Java中使用JDBF庫來讀取和創(chuàng)建DBF文件,有需要的小伙伴可以參考一下
    2025-04-04
  • nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    這篇文章主要介紹了nacos中的配置使用@Value注解獲取不到值的原因分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java并發(fā)編程之線程中斷

    Java并發(fā)編程之線程中斷

    這篇文章主要介紹了Java并發(fā)編程線程中斷,java線程中斷是一種線程間的協(xié)作模式,通過設(shè)置線程的中斷標(biāo)志并不能直接終止該線程的運(yùn)行,而是被中斷的線程根據(jù)中斷狀態(tài)自行處理,需要的朋友可以參考一下
    2021-09-09
  • SpringMVC @ResponseBody 415錯誤處理方式

    SpringMVC @ResponseBody 415錯誤處理方式

    這篇文章主要介紹了SpringMVC @ResponseBody 415錯誤處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 如何通過Java實(shí)現(xiàn)修改視頻分辨率

    如何通過Java實(shí)現(xiàn)修改視頻分辨率

    Java除了可以修改圖片的分辨率,還可以實(shí)現(xiàn)修改視頻的分辨率,這篇文章就將帶大家學(xué)習(xí)如果編寫這一工具類,感興趣的同學(xué)可以了解一下
    2021-12-12
  • 使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名

    使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名

    這篇文章主要介紹了使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名的方法,方便對服務(wù)器的遠(yuǎn)程管理和團(tuán)隊(duì)協(xié)作時用到,而且文中的方法無需調(diào)用jni,需要的朋友可以參考下
    2015-11-11

最新評論

浦城县| 工布江达县| 冕宁县| 霍山县| 家居| 昌宁县| 肃北| 潜江市| 昌邑市| 湟中县| 泰和县| 马公市| 岳阳县| 南涧| 信阳市| 秀山| 应城市| 沾益县| 新昌县| 伽师县| 肇东市| 孟州市| 龙州县| 红河县| 云林县| 东至县| 大余县| 潢川县| 淮滨县| 从化市| 宜宾县| 松潘县| 巧家县| 密云县| 岳普湖县| 金山区| 木兰县| 新建县| 溧阳市| 满洲里市| 南雄市|