Solution 26: 左旋转字符串

问题描述

定义字符串的左旋转操作:将字符串前面的若干个字符移动到字符串的尾部。

例如,字符串“abcdef”左旋转2位得到“cdefab”。要求实现的算法时间复杂度为O(n),常数级空间复杂度。

解决思路

整体翻转+部分翻转

程序

public class LeftRotateString {
	public void leftRotate(char[] c, int k) {
		if (c == null || c.length == 0) {
			return;
		}

		reverse(c, 0, c.length - 1);
		reverse(c, 0, c.length - k - 1);
		reverse(c, c.length - k, c.length - 1);
	}

	private void reverse(char[] c, int i, int j) {
		while (i < j) {
			char tmp = c[i];
			c[i] = c[j];
			c[j] = tmp;
			++i;
			--j;
		}
	}
}

  

时间: 2024-11-10 01:06:45

Solution 26: 左旋转字符串的相关文章

【编程题目】左旋转字符串 ☆

26.左旋转字符串(字符串)题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部.如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数.要求时间对长度为 n 的字符串操作的复杂度为 O(n),辅助内存为 O(1). 思路: 设字符串为 abcdefg 要左旋两个, $$表示操作范围,|表示要旋转的轴线,将操作范围分为两个部分.每次把范围小的部分与范围大的部分的靠近|的位置交换.范围相同则直接交换. 1. $ab|cdefg$ 2    

左旋转字符串-剑指Offer

左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”.是不是很简单?OK,搞定它! 思路 借助于字符串翻转,若要左旋转前n个字符串,就先翻转整个字符串,再分别翻转前n个和后面的字符 代码 public class Solution { public String Le

笔试算法题(13):反转链表 &amp; 左旋转字符串

出题:反转链表(递归和非递归解法): 分析:有递归跟非递归实现,注意对原始链表头节点的处理,因为其他节点都指向下一个节点,其需要指向NULL: 解题: 1 struct Node { 2 int v; 3 Node *next; 4 }; 5 Node* NonRecursiveListReverse(Node *head) { 6 if(head == NULL) return NULL; 7 Node *previous=NULL, *current=head, *temp=NULL; 8

剑指offer 43.左旋转字符串

43.左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”.是不是很简单?OK,搞定它! 思路一: 修正 n 的值后,让一个StingBuilder对象先后拼接 str 字符串中 n 之后的字符和 0 ~ n 之间的字符 1 public class Solution

《剑指offer》第五十八题II:左旋转字符串

// 面试题58(二):左旋转字符串 // 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部. // 请定义一个函数实现字符串左旋转操作的功能.比如输入字符串"abcdefg"和数 // 字2,该函数将返回左旋转2位得到的结果"cdefgab". #include <cstdio> #include "StringUtil.h" #include <string.h> char* LeftRotateS

剑指offer系列源码-左旋转字符串

题目1362:左旋转字符串(Move!Move!!Move!!!) 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1577解决:669 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 输入: 多组测试数据,每

【剑指offer】左旋转字符串

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27366485 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 输入: 多组测试数据,每个测试数据包含一个

编程算法 - 左旋转字符串 代码(C)

左旋转字符串 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部. 请定义一个函数实现字符串左旋转操作的功能. 编程珠玑, 首先翻转前部分, 再翻转后部分, 最后全部翻转. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio

【程序员编程艺术】学习记录1:左旋转字符串之指针翻转法

[程序员编程艺术]学习记录1:左旋转字符串之指针翻转法 题目:左旋转字符串 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(n) 思路一.暴力移位法 //暴力移位法 void leftshiftone(char *s, int n) { char t = s[0]; for(int i = 1;i < n; i++) s[i-1]