LeetCode刷题日记精选例题(详细解析+代码+链接)(1)

public static String replaceSpace(String s) {

if (s==null){

return null;

}

StringBuffer str = new StringBuffer();

for (int i=0;i<s.length();i++){

if (’ '==s.charAt(i)){

str.append(" ");//连接两个空格

}

}

if (str.length()==0){

return s;

}

int left = s.length()-1;

s+=str.toString();

int right = s.length()-1;

char[] cs = s.toCharArray();

while (left>=0){

if (cs[left]==’ '){

cs[right–]=‘0’;

cs[right–]=‘2’;

cs[right]=‘%’;

}else {

cs[right]=cs[left];

}

left–;

right–;

}

return new String(cs);

}

二、翻转字符串里的单词

=========================================================================

在这里插入图片描述

在这里插入图片描述

题目链接

首先去掉字符串前后的空格,我们利用双指针算法,区分有空格和无空格的情况即可

public static String reverseWords(String s) {

if (s==null){

return null;

}

String trim = s.trim();

StringBuilder str = new StringBuilder();

int left = trim.length()-1;

int right = trim.length()-1;

while (left>=0){

if (left>0&&’ '==trim.charAt(left-1)){

str.append(trim.substring(left,right+1));

while (’ '==trim.charAt(left-1)){

left–;

}

}else if (’ '==trim.charAt(left)){

str.append(" ");

left–;

right=left;

}else if (left==0){

str.append(trim.substring(left,right+1));

left–;

}

else {

left–;

}

}

return new String(str);

}

三、左旋转字符串(剑指Offer)

===============================================================================

在这里插入图片描述

题目链接

解题思路,不申请额外空间的情况下,我们采用小旋转->大旋转的思路,使每个局部进行翻转,以达到总体翻转的效果

public static String reverseLeftWords(String s, int n) {

char[] chars = s.toCharArray();

//局部翻转

for (int i=0,j=n-1;i<n/2;i++,j–){

char c = chars[i];

chars[i]=chars[j];

chars[j]=c;

}

for (int i=n,j=s.length()-1;i<(n+s.length())/2;i++,j–){

char c = chars[i];

chars[i]=chars[j];

chars[j]=c;

}

//整体翻转

for (int i=0,j=s.length()-1;i<s.length()/2;i++,j–){

char c = chars[i];

chars[i]=chars[j];

chars[j]=c;

}

return new String(chars);

}

在leetcode题解中看到一个很骚的解题方式:直接取余

0.0

public static String reverseLeftWords(String s, int n) {

int len = s.length();

StringBuilder str = new StringBuilder();

for (int i=n;i<n+s.length();i++){

str.append(s.charAt(i%s.length()));

}

return str.toString();

}

四、实现strStr()

==========================================================================

在这里插入图片描述

题目链接

直接KMP算法解决

关于KMP算法的介绍使用请看我的上一篇博文KMP算法解决字符串匹配问题(详细步骤图解)

public static int strStr(String haystack, String needle){

if (needle.length()==0){

return 0;

}

int[] next = new int[needle.length()];

getNext(next,needle);

for (int i=0,j=0;i<haystack.length();i++){

while (j>0&&haystack.charAt(i)!=needle.charAt(j)){

j=next[j-1];

}

if (haystack.charAt(i)==needle.charAt(j)){

j++;

}

if (j==needle.length()){

return i-j+1;

}

}

return -1;

}

private static void getNext(int[] next,String needle){

int len = needle.length();

next[0]=0;

//ABCDABD

for (int i=1,j=0;i<len;i++){

while (j>0&&needle.charAt(i)!=needle.charAt(j)){

j=next[j-1];

}

if (needle.charAt(i)==needle.charAt(j)){

j++;

}

next[i]=j;

}

}

五、重复的子字符串

=======================================================================

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
外链图片转存中…(img-4ZfTAGdY-1715796613699)]

[外链图片转存中…(img-1H4dDPG2-1715796613700)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值