《剑指offer第二版》面试题58 题目二:左旋字符串(java

2020-02-29  本文已影响0人  castlet

题目描述

解题思路

  1. 可以将字符串"abcdef"分为两个部分"ab"和"cdef".
  2. 先将ab进行翻转,得到ba。再讲"cdef"进行翻转,得到"fedc",整个字符串为"bafedc".
  3. 再将整个字符串翻转,得到"cdefab"。
void reverse(char[] chars, int start ,int end) {
    if (chars == null || start >= end || end >= chars.length) {
        return;
    }
    while (start < end) {
        char tmp = chars[start];
        chars[start] = chars[end];
        chars[end] = tmp;
        start ++;
        end --;
    }
}

String leftRotateStr(String str, int n){
    if (str == null || str.length() < n) {
        return str;
    }

    char[] charArray = str.toCharArray();
    // 翻转字符串前面n个字符
    reverse(charArray, 0, n - 1);
    // 翻转字符串后面的字符
    reverse(charArray, n, charArray.length - 1);
    // 翻转整个字符串
    reverse(charArray, 0, charArray.length - 1);

    return new String(charArray);
}

上一篇 下一篇

猜你喜欢

热点阅读