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;
}
大佬指点江山
public static int longestPalindrome(String s) {
int[] count = new int[128];
int length = s.length();
for (int i = 0; i < length; ++i) {
char c = s.charAt(i);
count[c]++;
}
int ans = 0;
for (int v: count) {
//大佬这块的思想很好
ans += v / 2 * 2;
if (v % 2 == 1 && ans % 2 == 0) {
ans++;
}
}
return ans;
}
3、LeetCode 412.Fizz Buzz
题目
写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
小编菜解
public List fizzBuzz(int n) {
final String const_FIZZ = “Fizz”;
final String const_BUZZ = “Buzz”;
List list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if (i%30 && i%50){
list.add(const_FIZZ+const_BUZZ);
}else if (i%3 == 0){
list.add(const_FIZZ);
}else if (i%5 == 0){
list.add(const_BUZZ);
}else{
list.add(String.valueOf(i));
}
}
return list;
}
这道题有点简单了点吧?
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
[外链图片转存中…(img-J2ohyBPY-1719189784717)]
[外链图片转存中…(img-b9pJp4CG-1719189784718)]