判断子序列、最长回文数、Fizz Buzz,java面试视频讲解

本文讨论了如何在Java中正确解决LeetCode409题——最长回文数,分析了初始解法的误区,并提供了进阶版本的解决方案,强调了回文串中奇数字符处理的改进。同时,作者分享了Java开发者的学习资源和成长经验。

char last = 0;

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

char c = s.charAt(i);

//找到最后一个字符

if (i == s.length() - 1){

last = s.charAt(i);

}

for (int j = left; j < t.length(); j++) {

char c1 = t.charAt(j);

if (last != 0 && last == c1){

return true;

}

if (c == c1){

left++;

break;

}

left++;

}

}

return false;

}

提交通过了,总感觉哪里不对劲,但也想不清楚,且看看官方答案再说吧!

大佬指点江山

public boolean isSubsequence(String s, String t) {

int n = s.length(), m = t.length();

int i = 0, j = 0;

while (i < n && j < m) {

if (s.charAt(i) == t.charAt(j)) {

i++;

}

j++;

}

return i == n;

}

这个思想啊,真的是有待进步。

2、LeetCode 409.最长回文数


题目

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

小编思路

1、回文字符串,表示reverse之后,与原字符串一致

2、表明只能有一个奇数的字母,其余字母都是偶数

3、如果有奇数,则获取个数最多的那个奇数,因为回文数,最多只能有一个奇数

4、如果没有奇数字母,长度为偶数之和

小编菜解

public static int longestPalindrome(String s) {

if (s == null || s.length()==0){

return 0;

}

//将字符串中字符放入map,值为字符的个数

Map<Character,Integer> map = new HashMap<>();

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

char c = s.charAt(i);

map.put(c,map.getOrDefault(c,0) + 1);

}

//偶数字母总长度

int size = 0;

//奇数字母最大长度

int oddSize = 0;

//只能有一个奇数的字母,其余字母都是偶数

List removeCharacterlist = new ArrayList<>();

for(Map.Entry<Character,Integer> entry:map.entrySet()){

//获取奇数字母最大长度

if (entry.getValue()%2 == 1){

if (entry.getValue() > oddSize){

oddSize = entry.getValue();

}

}else{//如果是偶数,则获取长度,直接相加

size += entry.getValue();

}

}

return size + oddSize;

}

错误的原因是对回文数的理解有误,如果为奇数,取它的偶数个,也是可以的。

小编菜解进阶版

public int longestPalindrome(String s) {

if (s == null || s.length()==0){

return 0;

}

//将字符串中字符放入map,值为字符的个数

Map<Character,Integer> map = new HashMap<>();

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

char c = s.charAt(i);

map.put(c,map.getOrDefault(c,0) + 1);

}

boolean isHaveOdd = false;

//偶数字母总长度

int size = 0;

//奇数字母最大长度

int oddSize = 0;

//只能有一个奇数的字母,其余字母都是偶数

List removeCharacterlist = new ArrayList<>();

for(Map.Entry<Character,Integer> entry:map.entrySet()){

//获取奇数字母最大长度

if (entry.getValue()%2 == 1){

size += entry.getValue()-1;

isHaveOdd = true;

}else{//如果是偶数

size += entry.getValue();

}

}

return isHaveOdd?size + oddSize + 1:size + oddSize;

}

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

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

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

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-f5055AM0-1711100680885)]

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

[外链图片转存中…(img-iACIPlc4-1711100680885)]

[外链图片转存中…(img-vZWSv6yU-1711100680886)]

[外链图片转存中…(img-uxGkj9D2-1711100680887)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值