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

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

作者: castlet | 来源:发表于2020-02-29 13:12 被阅读0次

题目描述

  • 字符串的左旋操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefab"。

解题思路

  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);
}

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/eksphhtx.html