0
点赞
收藏
分享

微信扫一扫

LeetCode 第 69 场力扣双周赛

_LEON_ 2022-01-09 阅读 70
5960. 将标题首字母大写

添加链接描述
给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :

  • 如果单词的长度为 1 或者 2 ,所有字母变成小写。
  • 否则,将单词首字母大写,剩余字母变成小写。

请你返回 大写后 的 title 。

示例 1:
输入:title = “capiTalIze tHe titLe”
输出:“Capitalize The Title”
解释:
由于所有单词的长度都至少为 3 ,将每个单词首字母大写,剩余字母变为小写。

提示:
1 <= title.length <= 100
title 由单个空格隔开的单词组成,且不含有任何前导或后缀空格。
每个单词由大写和小写英文字母组成,且都是 非空 的。

class Solution {
    public String capitalizeTitle(String title) {
        String[] ret = title.split(" ");
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < ret.length; i++) {
            if(ret[i].length() <= 2) {
                ret[i] = ret[i].toLowerCase();
            }else {
                String str = ret[i].toLowerCase(); // 全转小写
                // 字符数组 首字母大写
                char[] ch = str.toCharArray();
                ch[0] = Character.toUpperCase(ch[0]);
                ret[i] = new String(ch);
            }
            sb.append(ret[i]);
            if(i < ret.length - 1) { // 空格
                sb.append(" ");
            }
        }
        return sb.toString();
    }
}
class Solution {
    public String capitalizeTitle(String title) {
        String[] ret = title.split(" ");
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < ret.length; i++) {
            if(ret[i].length() <= 2) {
                ret[i] = ret[i].toLowerCase();
                sb.append(ret[i]);
            }else {
                sb.append(Character.toUpperCase(ret[i].charAt(0)));
                sb.append(ret[i].substring(1).toLowerCase());
            }
            if(i < ret.length - 1) {
                sb.append(" ");
            }
        }
        return sb.toString();
    }
}
5961. 链表最大孪生和

添加链接描述
在一个大小为 n 且 n 为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的孪生节点为第 (n-1-i) 个节点 。

比方说,n = 4 那么节点 0 是节点 3 的孪生节点,节点 1 是节点 2 的孪生节点。这是长度为 n = 4 的链表中所有的孪生节点。
孪生和 定义为一个节点和它孪生节点两者值之和。

给你一个长度为偶数的链表的头节点 head ,请你返回链表的 最大孪生和 。

示例 1:
输入:head = [5,4,2,1]
输出:6
解释:
节点 0 和节点 1 分别是节点 3 和 2 的孪生节点。孪生和都为 6 。
链表中没有其他孪生节点。
所以,链表的最大孪生和是 6 。

class Solution {
    public int pairSum(ListNode head) {
        if(head == null) {
            return 0;
        }
        List<Integer> list = new ArrayList<>();
        ListNode cur = head;
        // 将 val 加入 list
        while(cur != null) {
            list.add(cur.val);
            cur = cur.next;
        }
        // 遍历一半
        int max = 0;
        for(int i = 0; i < list.size() / 2; i++) {
            max = Math.max(max, list.get(i) + list.get(list.size() - 1 - i));
        }
        return max;
    }
}
class Solution {
    public int pairSum(ListNode head) {
        if(head == null) {
            return 0;
        }
        // 找中间节点
        ListNode fast = head;
        ListNode slow = head;
        while(fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        // 反转
        ListNode cur = slow.next;
        while(cur != null) {
            ListNode curNext = cur.next;
            cur.next = slow;
            slow = cur;
            cur = curNext;
        }
        // 求最大和
        int maxSum = 0;
        while(head != slow) {
            maxSum = Math.max(maxSum, head.val + slow.val);
            if(head.next == slow) {  // 偶数个
                break;
            }
            head = head.next;
            slow = slow.next;
        }
        return maxSum;
    }
}
举报

相关推荐

0 条评论