第1334题:
描述
给定一个数组,将数组向右移动k步,其中k为非负数.
样例 1:
输入: [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转1步: [7,1,2,3,4,5,6]
向右旋转2步: [6,7,1,2,3,4,5]
向右旋转3步: [5,6,7,1,2,3,4]
样例 2:
输入: [-1,-100,3,99], k = 2
输出: [3,99,-1,-100]
解释:
向右旋转1步: [99,-1,-100,3]
向右旋转2步: [3,99,-1,-100]
本题易错点:
k = k % n; // 易错点: 因为题目中的k可能会超出整个数组的取值范围 所以要保证 k 在有效范围内
代码如下:
public class Solution {
/**
* @param nums: an array
* @param k: an integer
* @return: rotate the array to the right by k steps
*/
public int[] rotate(int[] nums, int k) {
// Write your code here
int n=nums.length;
int[] returnNums=new int[n];
k = k % n; // 易错点:保证 k 在有效范围内
for(int i=0;i<n;i++)
{
if((k+i)<n)
{
returnNums[k+i]=nums[i];
}else
{
returnNums[(k+i)-n]=nums[i];
}
}
return returnNums;
}
}
第146题:
描述
将一个字符串中的小写字母转换为大写字母。不是字母的字符不需要做改变.
样例 1:
输入: str = "abc"
输出: "ABC"
样例 2:
输入: str = "aBc"
输出: "ABC"
样例 3:
输入: str = "abC12"
输出: "ABC12"
代码如下:
public class Solution {
/**
* @param letters: A string
* @return: A string
*/
public String lowercaseToUppercase2(String letters) {
// 使用 StringBuilder 更高效
StringBuilder stringBuilder = new StringBuilder();
// 直接遍历字符串,转换并拼接
for (int i = 0; i < letters.length(); i++) {
char c = letters.charAt(i);
if (c >= 'a' && c <= 'z') {
stringBuilder.append((char) (c - 32));
} else {
stringBuilder.append(c);
}
}
return stringBuilder.toString();
}
}
第353题:
描述
给定字符串S,找到一个字母字符,其大写和小写字母均出现在S中,则返回此字母的大写,若存在多个答案,返回最大的字母,不存在则返回"NO".
本题易错点:
if(lowercaseSet.contains((char)(currentChar+32))&¤tChar>largestChar)
该句中currentChar+32必须先用括号括起来,否则计算的char值就会发生错误
同理也适用于下一句
if(uppercaseSet.contains((char)(currentChar - 32))&&(char)(currentChar-32)>largestChar)
样例
输入: S = "admeDCAB"
输出: "D"输入: S = "adme"
输出: "NO"
1<=len(s)<=106
代码如下:
import java.util.HashSet;
import java.util.Set;
public class Solution {
/**
* @param s: a string
* @return: a string
*/
public String largestLetter(String s) {
Set<Character> lowercaseSet=new HashSet<>();
Set<Character> uppercaseSet=new HashSet<>();
char largestChar='\0';
int n=s.length();
boolean existFlag=false;
for(int i=0;i<n;i++)
{
char currentChar=s.charAt(i);
if(currentChar>='a'&¤tChar<='z')//是小写字母
{
lowercaseSet.add(s.charAt(i));
if(uppercaseSet.contains((char)(currentChar - 32))&&(char)(currentChar-32)>largestChar)
{
largestChar=(char)(currentChar-32);
existFlag=true;
}
}
if(currentChar>='A'&¤tChar<='Z')//是大写字母
{
uppercaseSet.add(s.charAt(i));
if(lowercaseSet.contains((char)(currentChar+32))&¤tChar>largestChar)
{
largestChar=currentChar;
existFlag=true;
}
}
}
return largestChar == '\0' ? "NO" : largestChar + "";
}
}
