JZ58 左旋转字符串

左旋转字符串_牛客题霸_牛客网

描述

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

数据范围:输入的字符串长度满足 0≤len≤100 0≤len≤100  , 0≤n≤100 0≤n≤100 

进阶:空间复杂度 O(n) O(n) ,时间复杂度 O(n) O(n) 

示例1

输入: "abcXYZdef",3

复制返回值:"XYZdefabc"

对应leetcode 189 思路和剑指offer-Page 287一样

1.先对str整个字符串进行翻转 fedZYXcba

2.对倒数第n个字符至str.end()这一区间进行翻转------>对cba进行翻转

3.对str.begin()至str.end()-n这一区间进行翻转。-------->对fedZYX进行翻转

#include <algorithm>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param n int整型 
     * @return string字符串
     */
    string LeftRotateString(string str, int n) {
        // write code here
        if(str.empty()) return "";
        n = n % str.size(); //输入的n可能大于size
        //abcXYZdef
        reverse(str.begin(), str.end());
        //fedZYXcba
        reverse(str.end() - n,str.end());
        //fedZYXabc
        reverse(str.begin(), str.end() - n);

        return str;
    }
};

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
将十进制数转换成字符串的过程需要用到除法和取模运算,这在汇编语言中可以通过使用令实现。 下面是一个将十进制数转换成字符串的汇编语言程序示例: ``` ; 将十进制数转换成字符串,存储在 buf 中 ; 参数: ; edx = 十进制数 ; ecx = buf 地址 ; 返回值: ; eax = 转换后字符串的长度 section .data digits db "0123456789" section .text global dec_to_str dec_to_str: push ebp mov ebp, esp push ebx push esi push edi mov ebx, ecx ; ebx = buf 地址 mov edi, ebx ; edi = 字符串针 mov esi, edx ; esi = 十进制数 xor eax, eax ; eax = 0 cmp esi, 0 jge .loop_start ; 如果是正数则直接跳转到循环开始 mov byte [edi], '-' inc edi neg esi ; 取绝对值 inc eax .loop_start: cmp esi, 0 jz .loop_end ; 如果已经处理完了则跳转到结束 xor edx, edx div dword 10 ; edx = 余数,eax = 商 mov dl, byte [digits + eax] ; 将数字转换成字符 mov byte [edi], dl ; 存储字符 inc edi inc eax ; 字符串长度加一 jmp .loop_start .loop_end: mov byte [edi], 0 ; 字符串末尾添加 NULL 结束符 sub edi, ebx ; 计算字符串长度 mov eax, edi pop edi pop esi pop ebx mov esp, ebp pop ebp ret ``` 该程序使用了除法令 `div` 和取模令 `mod` 来实现将十进制数转换成字符串的过程。具体来说,程序将十进制数不断地除以 10,将商转换成字符并存储到字符串中,直到商为 0。同时,程序还需要处理负数的情况,将负数转换成绝对值后,在字符串前添加负号。最后,程序需要加上 NULL 结束符,并计算字符串的长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给你。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值