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;
}
}