美文网首页
【2错-2】左旋转字符串

【2错-2】左旋转字符串

作者: 7ccc099f4608 | 来源:发表于2019-02-10 00:00 被阅读1次

https://www.nowcoder.com/practice/12d959b108cb42b1ab72cef4d36af5ec?tpId=13&tqId=11196&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

日期 是否一次通过 comment
2019-02-09 20:20 Y 方法太蠢,字符串先切割再拼接
2019-02-10 12:20 N 很逗比:array.length、string.length()

题目:输出字符串循环左移n位结果
思路:

  1. 0 ~ n-1逆序;
  2. n ~ last 逆序;
  3. 整体逆序

1. 二分法

public class Solution {
    public String LeftRotateString(String str,int n) {
        if(n > str.length() || n < 0) {
            return str;
        }
        char[] array = str.toCharArray();
        reverse(array, 0, n-1);
        reverse(array, n, str.length()-1);
        reverse(array, 0, str.length()-1);
        
        return new String(array);
    }
    
    private void reverse(char[] array, int sta, int end) {
        
        while(sta < end) {
            char temp = array[sta];
            array[sta++] = array[end];
            array[end--] = temp;
        }
    }

}

扩展

  1. 输出右移:
    改为先整体逆序,再分别0n-1、n-1last逆序

  2. 英文句子按单词逆序:
    改为先整体你学,再通过寻找空格依次确定单词的起点和终点,并分别逆序
    (代码来源:https://www.cnblogs.com/edisonchou/p/4823706.html)

public static string ReverseSentense(string sentense)
    {
        if (string.IsNullOrEmpty(sentense))
        {
            return null;
        }

        char[] array = sentense.ToCharArray();
        int start = 0;
        int end = array.Length - 1;

        // Step1.先翻转整个句子
        Reverse(array, start, end);
        // Step2.再翻转句中的每个单词
        start = end = 0;
        while (start < array.Length)
        {
            if (array[start] == ' ')
            {
                start++;
                end++;
            }
            else if (end == array.Length || array[end] == ' ')
            {
                Reverse(array, start, --end);
                start = end + 1;
                end++;
            }
            else
            {
                end++;
            }
        }

        return new string(array);
    }

相关文章

  • 【2错-2】左旋转字符串

    https://www.nowcoder.com/practice/12d959b108cb42b1ab72cef...

  • 牛客/力扣算法题

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

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

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

  • LeetCode题解之左旋转字符串

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

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

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

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

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

  • 算法(8) 翻转字符串

    描述给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)比如:ABCDE 2 --> ...

  • 左旋字符串

    Details: 把字符串前面的若干个字符移动到字符串尾部,例如把 abcd 左旋转 2 位得到字符串 cdba。...

  • 字符串

    字符串 类型1:旋转字符串 无论是循环字符串还是整体反转,都要用到一个reverse函数来辅助实现。 类型2:字符...

  • 字符串轮转

    问题描述 字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle...

网友评论

      本文标题:【2错-2】左旋转字符串

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