Java例题(字符串,集合)

题目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

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

**注意:**若 st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • st 仅包含小写字母
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 ,判断数组中是否存在两个 不同的索引 ij ,满足 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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值