题目1
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
**注意:**输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
输入:s = "the sky is blue"
输出:"blue is sky the"
示例 2:
输入:s = " hello world "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。
示例 3:
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
提示:
s
包含英文大小写字母、数字和空格' '
s
中 至少存在一个 单词
package exam;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.nextLine();
String newStr = test01(str);
System.out.println(newStr);
}
//给你一个字符串 `s` ,请你反转字符串中单词的顺序。
//s = "the sky is blue"
//输出:"blue is sky the"
//输入:s = " hello world "
//输出:"world hello"
public static String test01(String str){
String str1 = "";
String[] arr = str.split(" ");
for (int i = arr.length-1; i >=0; i--) {
if (arr[i].isEmpty()||arr[i].isBlank()){
continue;
}
str1=str1+arr[i]+" ";
}
str1 = str1.substring(0,str1.length()-1);
return str1;
}
}
题目2
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
**注意:**若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
提示:
s
和t
仅包含小写字母
package exam;
import java.util.HashMap;
import java.util.function.BiFunction;
public class Test02 {
public static void main(String[] args) {
String s = "rat";
String t = "car";
System.out.println(test02(s,t));
}
//给定两个字符串 `s` 和 `t` ,编写一个函数来判断 `t` 是否是 `s` 的字母异位词。
public static boolean test02(String str1,String str2){
if (str1.length()!=str2.length()){
return false;
}
HashMap<Character,Integer> hashMap1 = new HashMap<>();
HashMap<Character,Integer> hashMap2= new HashMap<>();
for (int i = 0; i < str1.length(); i++) {
char c = str1.charAt(i);
hashMap1.compute(c, new BiFunction<Character, Integer, Integer>() {
@Override
public Integer apply(Character key, Integer value) {
return value==null?1:value+1;
}
});
char b = str2.charAt(i);
hashMap2.compute(b, new BiFunction<Character, Integer, Integer>() {
@Override
public Integer apply(Character key, Integer value) {
return value==null?1:value+1;
}
});
}
return hashMap1.equals(hashMap2);
}
}
题目3
给你一个整数数组 nums
和一个整数 k
,判断数组中是否存在两个 不同的索引 i
和 j
,满足 nums[i] == nums[j]
且 abs(i - j) <= k
。如果存在,返回 true
;否则,返回 false
。
示例 1:
输入:nums = [1,2,3,1], k = 3
输出:true
示例 2:
输入:nums = [1,0,1,1], k = 1
输出:true
示例 3:
输入:nums = [1,2,3,1,2,3], k = 2
输出:false
方法一:
package exam;
import static java.lang.Math.abs;
public class Test03 {
public static void main(String[] args) {
int[] nums = {1,2,3,1,2,3};
int k = 2;
System.out.println(test03(nums, k));
}
//给你一个整数数组 `nums` 和一个整数 `k` ,判断数组中是否存在两个不同的索引`i` 和 `j` ,
// 满足 `nums[i] == nums[j]` 且 `abs(i - j) <= k` 。如果存在,返回 `true` ;否则,返回 `false` 。
//输入:nums = [1,2,3,1], k = 3
//输出:true
public static boolean test03(int[] arr,int k){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (i!=j&&arr[i]==arr[j]){
if (abs((i-j))<=k){
return true;
}
}
}
}
return false;
}
}
方法二:
package pm;
import java.util.HashSet;
import java.util.Set;
public class Test01 {
public static void main(String[] args) {
int[] nums = {1,0,1,1};
int k = 1;
System.out.println(test01(nums, k));
}
public static boolean test01(int[] nums,int k){
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
if (set.add(nums[i])){
if (set.size()>k){
set.remove(nums[i-k]);
}
}else {
if (set.size()<=k){
return true;
}
}
}
return false;
}
}