当前位置: 首页 > news >正文

求职Leetcode题目(16)

1.同构字符串

解题思路1:

egg 和 add 同构,就意味着下边的映射成立
e -> a
g -> d


也就是将 egg 的 e 换成 a, g 换成 d, 就变成了 add

同时倒过来也成立
a -> e
d -> g


也就是将 add 的 a 换成 e, d 换成 g, 就变成了 egg

foo 和 bar 不同构,原因就是映射不唯一
o -> a
o -> r
其中 o 映射到了两个字母

 代码:

class Solution {public boolean isIsomorphic(String s, String t) {int n =s.length();HashMap<Character,Character> map =new HashMap<>();for(int i =0;i<n;i++){char c1 =s.charAt(i);char c2 =s.charAt(i);if(map.containsKey(c1)){if(map.get(c1)!=c2){return false;}}else{map.put(c1,c2);}}return true;}
}

 思路2:

将第一个出现的字母映射成 1,第二个出现的字母映射成 2

对于 egg
e -> 1
g -> 2
也就是将 egg 的 e 换成 1, g 换成 2, 就变成了 122

对于 add
a -> 1
d -> 2
也就是将 add 的 a 换成 1, d 换成 2, 就变成了 122

egg -> 122, add -> 122
都变成了 122,所以两个字符串异构。

代码:

public boolean isIsomorphic(String s, String t) {return isIsomorphicHelper(s).equals(isIsomorphicHelper(t));
}private String isIsomorphicHelper(String s) {int[] map = new int[128];int n = s.length();StringBuilder sb = new StringBuilder();int count = 1;for (int i = 0; i < n; i++) {char c = s.charAt(i);//当前字母第一次出现,赋值if (map[c] == 0) {map[c] = count;count++;}sb.append(map[c]);}return sb.toString();
}

2.移除链表元素

解题思路:

  1. 删除头结点时另做考虑(由于头结点没有前一个结点)
  2. 添加一个虚拟头结点,删除头结点就不用另做考虑
  3. 递归

 代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {//删除值相同的头节点后,可能新的头结点也值相等,用循环解决while(head!=null&&head.val==val){head=head.next;}if(head==null){return head;}ListNode prev =head;//确保当前节点后还有结点while(prev.next!=null){if(prev.next.val==val){prev.next=prev.next.next;}else{prev=prev.next;}}return head;}}
(递归)

代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {if(head==null)return null;head.next =removeElements(head.next,val);if(head.val==val){return head.next;}else{return head;}}}

3.长度最小的子数组

(暴力)代码: 

class Solution {public int minSubArrayLen(int s, int[] nums) {int min = Integer.MAX_VALUE;for (int i = 0; i < nums.length; i++) {int sum = nums[i];if (sum >= s)return 1;for (int j = i + 1; j < nums.length; j++) {sum += nums[j];if (sum >= s) {min = Math.min(min, j - i + 1);break;}}}return min == Integer.MAX_VALUE ? 0 : min;}
}

解题思路2: 

 代码:

class Solution {public int minSubArrayLen(int s, int[] nums) {int lo =0,hi=0,sum=0,min =Integer.MAX_VALUE;while(hi<nums.length){sum+=nums[hi++];while(sum>=s){min=Math.min(min,hi-lo);sum-=nums[lo++];}}return min ==Integer.MAX_VALUE?0:min;}
}


http://www.mrgr.cn/news/74837.html

相关文章:

  • 微服务各组件整合
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)
  • 笔记 | image may have poor performance,or fail,if run via emulation
  • 正则表达式那些事儿
  • C++编程技巧与规范-类和对象
  • leetcode-15-三数之和
  • 如何解决 Android Studio 中三方库依赖无法找到的问题
  • 准确率调整研究中心
  • cpp中vector的push_back和emplace_back精简小结
  • LeetCode【0047】全排列II
  • HarmonyOS基础:选项卡组件(Tabs)
  • PostgreSQL 查看重复索引
  • 第一课-Rust入门
  • 数据结构查找-哈希表(创建+查找+删除)+(C语言代码)
  • Tofu识别跟踪变焦镜头控制接口与协议
  • 云服务器安装mysql8.0(阿里云或者腾讯云都可以)
  • 比高考还严?该地软考报考减少了5420人,工作人员却增加100多人!
  • 如何使用Jupyter
  • 【机器学习chp2】贝叶斯最优分类器、概率密度函数的参数估计、朴素贝叶斯分类器、高斯判别分析。万字超详细分析总结与思考
  • 真的别跟风了!PMP认证原来只对这些人有用...
  • leveldb存储token的简单实现
  • 理解 C++ 中的 `const` 关键字
  • 域名绑定服务器小白教程
  • [刷题]入门1.矩阵转置
  • MATLAB和Python及R瑞利散射
  • 37邮件服务器