100天算法入门 - 每日三题 - Day8同构字符串存在重复元素翻转二叉树
Posted 哪 吒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天算法入门 - 每日三题 - Day8同构字符串存在重复元素翻转二叉树相关的知识,希望对你有一定的参考价值。
大家好,我是哪吒,一个热爱编码的Java工程师,本着“欲速则不达,欲达则欲速”的学习态度,在程序猿这条不归路上不断成长,所谓成长,不过是用时间慢慢擦亮你的眼睛,少时看重的,年长后却视若鸿毛,少时看轻的,年长后却视若泰山,成长之路,亦是渐渐放下执念,内心归于平静的旅程。
也许,我们永远都不会知道自己能走到何方,遇见何人,最后会变成什么样的人,但一定要记住,能让自己登高的,永远不是别人的肩膀,而是挑灯夜战的自己,人生的道路刚刚启程,当你累了倦了也不要迷茫,回头看一看,你早已不再是那个年少轻狂的少年。
大连友好广场
算法是进阶架构师的基础,基础不牢,地动山摇,2021-8-14起开始刷题,目标100天,300道LeetCode算法题,分享是学习的最好方式,加油,嗨起来。
1、LeetCode 205.同构字符串
题目
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
小编菜解
public static boolean isIsomorphic(String s, String t) {
Map<String, String> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
//第一个字符串当前字符
String sc = String.valueOf(s.charAt(i));
//第二个字符串当前字符
String tc = String.valueOf(t.charAt(i));
//如果第一个map包含此字符,判断第二个字符串当前位置值是否等于map的value,不等返回false
if (map.containsKey(sc)){
if(!map.get(sc).equals(tc)){
return false;
}
}else{//如果不包含
//此时也不应该存在值为tc的key
if(map.containsValue(tc)){
return false;
}
//放入map
map.put(sc, tc);
}
}
return true;
}
大佬指点江山
public static boolean isIsomorphic(String s, String t) {
Map<Character, Character> map1 = new HashMap<Character, Character>();
Map<Character, Character> map2 = new HashMap<Character, Character>();
for (int i = 0; i < s.length(); i++) {
//第一个字符串当前字符
char sc = s.charAt(i);
//第二个字符串当前字符
char tc = t.charAt(i);
//如果map1包含,则值必须等于tc,,,,,如果map2包含此值,则此值必须等于sc,,否则报错
if (map1.containsKey(sc) && map1.get(sc)!=tc || map2.containsKey(tc) && map2.get(tc)!=sc){
return false;
}
map1.put(sc,tc);
map2.put(tc,sc);
}
return true;
}
唯一的不足就是Character的问题,,,谨记,谨记。
2、LeetCode 217.存在重复元素
题目
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回
true
。如果数组中每个元素都不相同,则返回false
。
小编菜解
public boolean containsDuplicate(int[] nums) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if(list.contains(nums[i])){
return true;
}
list.add(nums[i]);
}
return false;
}
提示超出时间限制!
大佬指点江山
public static boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
for (int n : nums) {
if (!set.add(n)) {
return true;
}
}
return false;
}
Set检索元素效率低下,删除和插入效率高;List查找元素效率高,插入删除元素效率低。
使用contains方法查询元素是否存在HashSet要比ArrayList快的多。
3、LeetCode 226.翻转二叉树
题目
翻转一棵二叉树。
小编菜解
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
推荐阅读
【100天算法入门 - 每日三题 - Day1】二叉树的中序遍历、两数之和、整数反转
【100天算法入门 - 每日三题 - Day2】二分查找、第一个错误的版本、搜索插入位置
【100天算法入门 - 每日三题 - Day3】回文数、罗马数字转数字、最大公共前缀
【100天算法入门 - 每日三题 - Day4】有效的括号、删除有序数组中的重复项、实现strStr
【100天算法入门 - 每日三题 - Day5】最后一个单词的长度、相同的树、买卖股票的最佳时机
以上是关于100天算法入门 - 每日三题 - Day8同构字符串存在重复元素翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章
100天算法入门 - 每日三题 - Day12Nim游戏3的幂4的幂
100天算法入门 - 每日三题 - Day15判断子序列最长回文数Fizz Buzz
100天算法入门 - 每日三题 - Day16第三大的数字符串中的单词数排列硬币
100天算法入门 - 每日三题 - Day5最后一个单词的长度相同的树买卖股票的最佳时机