美文网首页
字符串旋转

字符串旋转

作者: 模块米次访问法撒旦法地方 | 来源:发表于2016-11-27 19:43 被阅读0次

题目:给定字符串,将字符串前几位移动到字符串尾部。
样例:“abcdef” ,将前三位移动到字符串尾部,则结果为“defabc”
解法1:蛮力移位

public class RevertString {

    private static String shiftOne(String str) {
        char[] chars = str.toCharArray();
        char head = chars[0];
        for (int i = 1; i < chars.length; i++) {
            chars[i - 1] = chars[i];
        }
        chars[chars.length - 1] = head;
        return String.valueOf(chars);
    }

    private static String revert(String str,int size) {
        for (int i = 0; i < size; i++) {
            str = shiftOne(str);
        }
        return str;
    }

    public static void main(String[] args) {
        System.out.println(revert("abcdef",3));
    }
}

该解法时间复杂度O(mn)

解法2:三步反转法

private static String revertString(String str, int from, int to) {
        char[] chars = str.toCharArray();
        while (from < to) {
            char head = chars[from];
            chars[from++] = chars[to];
            chars[to--] = head;
        }
        return String.valueOf(chars);
    }

    private static String revert(String str, int size) {
        str = revertString(str, 0, size - 1);
        str = revertString(str, size, str.length() - 1);
        str = revertString(str, 0, str.length() - 1);
        return str;
    }

    public static void main(String[] args) {
        System.out.println(revert("abcdef", 3));
    }

该解法时间复杂度O(n)

拓展:单词反转,例如将"I work for money."反转为"money. for work I"

    private static String revert(String str, int from, int to) {
        char[] chars = str.toCharArray();
        while (from < to) {
            char head = chars[from];
            chars[from++] = chars[to];
            chars[to--] = head;
        }
        return String.valueOf(chars);
    }

    public static void main(String[] args) {
        String str = "I work for money.";
        str = revert(str, 0, str.length() - 1);
        String key = " ";
        int start = 0;
        int blankIndex = str.indexOf(key, start);
        while (blankIndex != -1) {
            str = revert(str, start, blankIndex - 1);
            start = blankIndex + 1;
            blankIndex = str.indexOf(key, start);
        }
        System.out.println(str);
    }

相关文章

  • 旋转字符串 (lintcode:rotate-string)

    旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 例如: 对于字符串 "abcdefg...

  • 旋转字符串

    旋转字符串

  • lintCode题解(8)

    标签(空格分隔): lintCode 旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)...

  • 判断字符串str1是否是字符串str2的旋转词

    判断字符串str1是否是字符串str2的旋转词 对字符串的旋转操作描述如下:例如: str = "123456" ...

  • 牛客/力扣算法题

    1.逆转字符串 2.旋转字符串

  • LintCode算法刷题之旋转字符串

    链接:旋转字符串 描述 给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转...

  • LeetCode题解之左旋转字符串

    左旋转字符串 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左...

  • 算法精选题总结之字符串类

    1.字符串旋转2.字符串包含3.字符串的全排列4.字符串转换成整数5.回文判断6.最长回文子串 1.字符串旋转 给...

  • 面试题58 - II. 左旋转字符串

    左旋转字符串 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左...

  • 2020-05-25 第一题

    面试题58 - II. 左旋转字符串 难度简单30 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部...

网友评论

      本文标题:字符串旋转

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