真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供雁塔網(wǎng)站建設(shè)、雁塔做網(wǎng)站、雁塔網(wǎng)站設(shè)計(jì)、雁塔網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、雁塔企業(yè)網(wǎng)站模板建站服務(wù),10年雁塔做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

代碼

解法一

最直觀的方式,依次將需要移位的字符移動(dòng)至最后,但是每個(gè)字符都需要移動(dòng)數(shù)組的長度-1,如果數(shù)組的長度是n,需要移k位,則總共需要移動(dòng) 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次向左移動(dòng)
      // 比如abcde,要移動(dòng)2位,即cdead
      // 1. 將a移動(dòng)至最后,此時(shí)是bcdea
      // 2. 將b移動(dòng)至最后,此時(shí)是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”對(duì)應(yīng)“ba”,“xyz”對(duì)應(yīng)“zyx”,總共需要三步即可得到期望想過

  • 反轉(zhuǎn)要移位的部分,”abcXYZdef”操作后是”cbaXYZdef”
  • 反轉(zhuǎn)其余的部分,”cbaXYZdef”操作后是”cbafedZYX”
  • 反轉(zhuǎn)整個(gè)字符串,”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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


文章題目:java實(shí)現(xiàn)左旋轉(zhuǎn)字符串
網(wǎng)站鏈接:http://weahome.cn/article/igjjsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部