前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
一、反转区间为n的字串
reverseString(sb, 0, n - 1);
对字符的反转我们采用StringBuilder
进行,直接new StringBuilder生产sb对象,然后给sb设置反转后想要的结果。通过setCharAt(key,value)设置
代码如下:
while (start < end) { char temp = sb.charAt(start); sb.setCharAt(start, sb.charAt(end)); sb.setCharAt(end, temp); start++; end--; }
二、反转区间为n到末尾的子串
reverseString(sb, n, len - 1);
至此,我们最后只需要整体对字符串进行一次反转,就能实现左旋转字符串!
同样是StringBuilder
这种形式
三、对字符串整体进行反转
sb.reverse().toString();
流程如下
完整代码如下
class solution{ public String reverseLeftWords(String s, int n) { int len = s.length(); StringBuilder sb = new StringBuilder(s); reverseString(sb, 0, n - 1); reverseString(sb, n, len - 1); return sb.reverse().toString(); } public void reverseString(StringBuilder sb, int start, int end) { while (start < end) { char temp = sb.charAt(start); sb.setCharAt(start, sb.charAt(end)); sb.setCharAt(end, temp); start++; end--; } } }
总结
有没有发现和昨天练习的题很相似,昨天练习的也有旋转字符串这一步。其实旋转字符串这里我们可以直接加深记忆,在遇到这样的题直接就属于默写下来了!