• 8. 旋转字符串


    1、题目描述

    题目链接:http://www.lintcode.com/zh-cn/problem/rotate-string/

    给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)

    2、难点分析

    特殊情况:①字符串为""的情况②offset=0的情况③offset远大于字符串长度的情况

    前两种情况,如果想到了直接return就好。第三种情况难以想到,想到的话也好处理,因为如果偏移量offset为字符串长度的整数倍,那么偏移之后的结果其实就是源字符串,所以真正的偏移量应该为offset%(字符串的长度)。

    3、Java代码

    复制代码
    public class Solution {
        /**
         * @param str: an array of char
         * @param offset: an integer
         * @return: nothing
         */
         
         //没有考虑字符串为""的情况
         //没有考虑到offset远大于字符串长度的情况,导致时间超时
        public void rotateString(char[] str, int offset) {
            // write your code here
            char temp;
            if(offset==0) return;
            if(str.length==0)return;
            int len=str.length;
            for(int i=1;i<=offset%len;i++){
                temp=str[len-1];
                int j=len-2;
                while(j>=0){
                    str[j+1]=str[j];
                    j--;
                }
                str[0]=temp;
            }
        }
    }

























    方法二:将字符串分成两部分
        

    public class Solution {
    /*
    * param A: A string
    * param offset: Rotate string with offset.
    * return: Rotated string.
    */
    public char[] rotateString(char[] A, int offset) {
    // wirte your code here
    //当偏移量为0或者字符数组为空时直接返回原字符数组
    if(offset==0||A.length==0){
    return A;
    }
    //当字符数组的长度小于偏移量时,先对其取余
    if(offset>A.length){
    offset =offset%A.length;
    }
    //将字符串分为两部分,将第一部分翻转
    for(int i = 0,j=A.length-1-offset;i<j;i++,j--){
    char temp = A[i];
    A[i] = A[j];
    A[j] = temp;
    }
    //将第二部分翻转
    for(int i= A.length-offset,j=A.length-1;i<j;i++,j--){
    char temp = A[i];
    A[i] = A[j];
    A[j] = temp;
    }
    //再将整个字符串翻转
    for(int i =0,j=A.length-1;i<j;i++,j--){
    char temp = A[i];
    A[i] = A[j];
    A[j] = temp;
    }
    return A;
    }

    };

  • 相关阅读:
    Visual Studio 2008 可扩展性开发(一):VS概览
    CButtonST使用技巧: CButtonST简介
    Doxygen + Graphviz + Htmlhelp, 成为文档好手
    Django的多数据库处理(垂直分库和水平分库)
    赫曼米勒中国| 设计,让世界更美好。
    maccman/juggernaut
    aptget y install buildessential
    QT分析之WebKit(三)
    Django的多数据库支持,太酷了~
    我们的征途是星辰大海#
  • 原文地址:https://www.cnblogs.com/Pjson/p/8231394.html
Copyright © 2020-2023  润新知