• 力扣刷题(2022-6-28)


    反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

    示例 1:


    输入:head = [1,2,3,4,5]
    输出:[5,4,3,2,1]
    示例 2:


    输入:head = [1,2]
    输出:[2,1]
    示例 3:

    输入:head = []
    输出:[]

    如果单纯的将第1个结点指向NULL,将第2个结点指向第1个结点的地址,那么我们就会丢失第3个结点的地址,从而无法让第3个结点指向第2个结点。所以需要三个指针。

    1. ListNode* reverseList(ListNode* head) {
    2. ListNode *p =nullptr;
    3. ListNode *tmp;
    4. while(head){
    5. tmp = head->next;
    6. head->next = p;
    7. p = head;
    8. head = tmp;
    9. }
    10. return p;
    11. }

    无重复字符的最长字串

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    输入: s = "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    示例 2:

    输入: s = "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    示例 3:

    输入: s = "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
         请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    指定左右位置,将左指针向右移动一格,表示开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着以左指针开始的不包含重复字符的最长子串。

    1. public int lengthOfLongestSubstring(String s) {
    2.         int len = s.length();
    3. if(len == 0) return 0;
    4. int start = 0 , end = 0;
    5. int ret = 0;//子串长度
    6. while(end < len){
    7. for(int j = start ; j < end ; j++){
    8. if(s.charAt(j) == s.charAt(end)){//当前end下标的字符与下标为j的字符一样时
    9. ret = Math.max(ret , end - start);//求最大子串长度
    10. start = j + 1;//滑动start到重复字符的后面即可
    11. }
    12. }
    13. end++;//没有出现重复字符,那么end后移,加长窗口长度继续新一轮的遍历比较
    14. }
    15. return Math.max(ret , end - start);//再进行最后一次比较
    16.     }

  • 相关阅读:
    【infiniband】用udaddy测试RDMA_CM API通过GID连接
    【Eye-tracking】DIDEC: The Dutch Image Description and Eye-tracking Corpus
    单商户商城系统功能拆解30—营销中心—积分签到
    一起Talk Android吧(第三百八十八回:lifecycle)
    23.1、Android -- OkHttp3请求的数据格式-文件上传
    【自动驾驶】PETR/PETRv2/StreamPETR论文分析
    为什么序列化要实现Serializable接口
    MySQL —— 排序,分页
    Hadoop学习总结(Shell操作)
    RSA数据加密与数字签名
  • 原文地址:https://blog.csdn.net/m0_64006869/article/details/125507363