8.Rotate String

lintcode

题解1:

class Solution {
public:
/**
* @param str: An array of char
* @param offset: An integer
* @return: nothing
*/
void rotateString(string &str, int offset) {
string t_str;
int len = str.length();
if (len == 0 || offset == 0)return;
int new_offset = offset % len; int j = len - 1;
for (int i = 0; i< new_offset; i++)
{
t_str.insert(0,1 ,str[j]);
j--;
} if (new_offset == 0)new_offset = len;
for (int i=0;i!=j+1;i++)
{
t_str.push_back(str[i]);
} for (int i = 0; i < len; i++)
{
str[i] = t_str[i];
}
}
};

没能想出空间复杂度O(1)的题解

所以就直接暴力解了,复杂度勉强能接受

反思:

  • 一开始没看清题目就直接编程,以为offset表示的是字符串的从0开始的下标,其实不然,实际题目的要求是把 offset%len 个末尾字符移动到前面. 就这一点卡了很久,所以正确理解题目很关键,不要急于码代码.
  • 当 offset > len 时,可以通过 offset%len处理一下,避免重复的循环

题解2

class Solution {
public:
/**
* @param str: An array of char
* @param offset: An integer
* @return: nothing
*/
void rotateStr(string &str,int left,int right)
{
while (left < right)
{
char tc = str[left];
str[left] = str[right];
str[right] = tc;
left++;
right--;
}
}
void rotateString(string &str, int offset) {
int len = str.length();
if(len == 0)return;
int new_offset = offset % len;
rotateStr(str, 0, len-new_offset-1);
rotateStr(str, len-new_offset, len-1);
rotateStr(str, 0, len-1);
}
};

反思

  • 第二次刷仍然犯了第一次的错误,实际题目的要求是把 offset%len 个末尾字符移动到前面
  • 实现原理是1 翻转左边 2 翻转右边 3 翻转整个字符串

处理时间稍微优化了下,实现了O(1)的空间复杂度

Lincode刷题No.8的更多相关文章

  1. LinCode 刷题 之二叉树最小深度

    http://www.lintcode.com/zh-cn/problem/minimum-depth-of-binary-tree/  题目描述信息 /** * Definition of Tree ...

  2. LeetCode刷题系列

    LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

  3. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  4. 刷题ING...

    我用codeVS刷题.. 努力准备!!

  5. XidianOJ 1020 ACMer去刷题吧

    题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...

  6. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  7. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  8. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  9. 用js刷题的一些坑

    leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...

随机推荐

  1. Codeforces Round #577 (Div 2)

    A. Important Exam 水题 #include<iostream> #include<string.h> #include<algorithm> #in ...

  2. asp.net MVC 模板定制

    模板存放位置:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC ...

  3. spring mvc 接收表单 bean

    spring MVC如何接收表单bean 呢? 之前项目中MVC框架一直用struts2,所以我也就按照struts2 的思维来思考 页面loginInput.jsp: <?xml versio ...

  4. hdu 1026 Ignatius and the Princess I(bfs)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. 2018-2-13-win10-uwp-ContentDialog-点确定不关闭

    title author date CreateTime categories win10 uwp ContentDialog 点确定不关闭 lindexi 2018-2-13 17:23:3 +08 ...

  6. [转载] linux find 命令

    转载自 http://www.jb51.net/os/RedHat/1307.html Linux下find命令在目录结构中搜索文件,并执行指定的操作. Linux下find命令提供了相当多的查找条件 ...

  7. JQuery操作select下拉框

    JQuery操作select下拉框 获取Select选择的Text和Value $("#select_id").change(function(){//code...}); //为 ...

  8. MySQL——修改视图

    修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性. 1.  用  CREATE  OR  REPLACE   VIEW  语句修改视图 语法格式 ...

  9. java 事件监听机制组成

    事件源(组件) 事件(Event) 监听器(Listener) 事件处理(引发事件后处理方式) 事件监听机制流程图 务必记牢: 确定事件源(容器或组件) 通过事件源对象的addXXXListener( ...

  10. H3C 域名