列表

详情


NC262. 左旋转字符串

描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列  S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc”

数据范围:输入的字符串长度满足
进阶:空间复杂度 ,时间复杂度

示例1

输入:

"abcXYZdef",3

输出:

"XYZdefabc"

示例2

输入:

"aab",10

输出:

"aba"

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 2ms, 内存消耗: 404KB, 提交时间: 2021-11-26

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @param n int整型 
 * @return string字符串
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
char* LeftRotateString(char* str, int n ) {
    // write code here
    char *result;
	int len, i;
	
	if (NULL == str || n < 0) {
		return "";
	}

	len = strlen(str);
	if (len < n && len != 0) {
		n = n % len;
	} 
	result = (char*)malloc(len);
	if (result == NULL) {
		return "";
	}

	for (i = n; i < len; i++) {
		result[i - n] = str[i]; //拷贝B字符串
	}

	for (i = 0; i < n; i++) {
		result[len - n + i] = str[i]; // 拷贝A字符串
	}
	return result;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 524KB, 提交时间: 2022-02-10

class Solution {
public:
    string LeftRotateString(string str, int n)
    {
        if(str.empty()|| n == 0) return str;
        n%= str.size();
        return str.substr(n)+str.substr(0,n);
    }
};



// class Solution {
// public:
//     void ReverseString(string &str,int start,int end){
//         while(start<end){
//             char temp = str[start];
//             str[start] = str[end];
//             str[end] = temp;
//             start++;
//             end--;
//         }
//     }
    
//     string LeftRotateString(string str, int n)
//     {
//         if(str.empty() || n == 0) return str;
//         n%=str.size();
//         ReverseString(str,0,n-1);
//         ReverseString(str,n,str.size()-1);
//         ReverseString(str, 0, str.size()-1);
//         return str;
//     }
// };


// class Solution {
// public:
//     void LeftRotateStringOne(string& str){
//         char temp = str[0];
//         int i = 0;
//         for(;i<str.size()-1;i++)
//         {
//             str[i] = str[i+1];
//         }
//         str[i] = temp;
//     }
//     string LeftRotateString(string str, int n) {
//         if(n == 0 || str.empty())
//             return str;
//         n %= str.size();
//         while(n--)
//         {
//             LeftRotateStringOne(str);
//         }
//         return str;
//     }
// };

C++ 解法, 执行用时: 2ms, 内存消耗: 524KB, 提交时间: 2021-11-25

class Solution {
public:
    string LeftRotateString(string str, int n) {
        if(str.size() <= 1)
            return std::move(str);
        auto sz = str.size();
        while(n >= sz)
            n %= sz;
        str += str;
        return std::move(str.substr(n, sz));
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 528KB, 提交时间: 2021-11-22

class Solution {
public:
    string LeftRotateString(string str, int n) {
        int len = str.size();
        if(len==0)
            return "";
        n = n%len;
        if(n==0)
            return str;
        str = str + str.substr(0,n);
        str = str.substr(n);
        return str;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 540KB, 提交时间: 2021-11-22

class Solution {
public:
    string LeftRotateString(string str, int n) {
        int len = str.length();
        string ret = "";
        if(len == 0){
            return ret;
        }
        n = n % len;
        ret += str.substr(n, len) + str.substr(0, n);
        return ret;
    }
};

上一题