• 确定字符串是否是另一个的排列+压缩字符串+分发饼干


    目录

    确定字符串是否是另一个的排列

    题目描述

    方法一(开辟四个数组,要有大小写):

    方法二(排列):

    方法3(越来越短) 

    压缩字符串

    题目描述

    代码

    分发饼干

    题目描述

    思路分析:

     


    确定字符串是否是另一个的排列

    题目描述


    实现一个算法来识别一个字符串 str2str2 是否是另一个字符串 str1str1 的排列。排列的解释如下:如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。(不忽略大小写)

    如果 str2 字符串是 str1 字符串的排列,则输出 YES;如果 str2 字符串不是 str1 字符串的排列,则输出 NO;

    输入描述
    第一行为字符串str1;

    第二行为字符串str2;

    字符串长度均不超过 100。

    输出描述;
    输出一行,如果 str2 字符串是 str1 字符串的排列,则输出 YES;

    如果 str2 字符串不是 str1 字符串的排列,则输出 NO;

    输入输出样例
    示例
    输入

    acb
    bac

    输出

    YES

    运行限制
    最大运行时间:1s
    最大运行内存: 256M

    方法一(开辟四个数组,要有大小写):

    1. import java.awt.geom.Arc2D;
    2. import java.util.Scanner;
    3. public class Main {
    4. static int[] c1=new int[26],c2=new int[26];
    5. static int[] c3=new int[26],c4=new int[26];
    6. public static void main(String[] args) {
    7. Scanner sc = new Scanner(System.in);
    8. String s=sc.next();
    9. String t=sc.next();
    10. for(int i=0;i
    11. char c=s.charAt(i);
    12. //A65 a97小写的更大
    13. if(c>'Z') c2[c-'a']++;
    14. else c1[c-'A']++;
    15. }
    16. for(int i=0;i
    17. char c=t.charAt(i);
    18. //A65 a97小写的更大
    19. if(c>'Z') c4[c-'a']++;
    20. else c3[c-'A']++;
    21. }
    22. for(int i=0;i<26;i++) {
    23. if(c2[i]!=c4[i]||c1[i]!=c3[i]) {
    24. System.out.println("NO");
    25. return;
    26. }
    27. }
    28. System.out.println("YES");
    29. }
    30. }

    方法二(排列):

    1. import java.util.Arrays;
    2. import java.util.Scanner;
    3. public class Main {
    4. public static void main(String[] args) {
    5. Scanner sc = new Scanner(System.in);
    6. char[] s=sc.next().toCharArray();
    7. char[] t=sc.next().toCharArray();
    8. Arrays.sort(s);
    9. Arrays.sort(t);
    10. if(s.length!=t.length) {
    11. System.out.println("NO");
    12. return;
    13. }
    14. for(int i=0;i
    15. if(s[i]!=t[i]) {
    16. System.out.println("NO");
    17. return;
    18. }
    19. }
    20. System.out.println("YES");
    21. }
    22. }

    方法3(越来越短) 

    1. import java.util.Arrays;
    2. import java.util.Scanner;
    3. public class Main {
    4. public static void main(String[] args) {
    5. Scanner sc = new Scanner(System.in);
    6. char[] s=sc.next().toCharArray();
    7. char[] t=sc.next().toCharArray();
    8. Arrays.sort(s);
    9. Arrays.sort(t);
    10. String s1=new String(s);
    11. String t1=new String(t);
    12. System.out.println(s1.equals(t1)?"YES":"NO");
    13. }
    14. }

    压缩字符串

    题目描述


    实现一个算法来压缩一个字符串。压缩的要求如下:

    需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。

    压缩的格式是将连续相同字符替换为字符 + 数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"。

    输入描述
    输入一行字符串,长度不超过 500.

    输出描述
    输出一行。若输入的字符串可压缩,则输出压缩后的字符串,否则输出 NO。

    输入输出样例
    示例
    输入

    AAABCCDDDD

    输出

    A3BC2D4

    运行限制
    最大运行时间:1s
    最大运行内存: 256M

    代码

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. char[] s=sc.next().toCharArray();
    6. boolean f=false;
    7. for(int i=1;i
    8. if(s[i]==s[i-1]) f=true;
    9. }
    10. if(!f) {
    11. System.out.println("NO");
    12. return;
    13. }
    14. //Java的String不可变
    15. StringBuffer sb = new StringBuffer();
    16. for(int i=0,j=0;i
    17. while(j+11]==s[i]) j++;
    18. int len=j-i+1;
    19. sb.append(s[i]);
    20. if(len>1) sb.append(len);
    21. i=j+1;
    22. }
    23. System.out.println(sb);
    24. }
    25. }

    分发饼干

    题目描述


    实现一个算法找到使最多孩子得到满足的分发饼干方法。介绍如下:

    家长要将饼干分发给孩子,每个孩子有一个表示胃口的值,每个饼干有一个表示尺寸的值。如果饼干的尺寸与孩子的胃口相等或大于胃口,则将这个饼干分发给这个孩子,孩子能得到满足。

    对于给定孩子及饼干的数组,需要将饼干分发给孩子,使最多的孩子得到满足。

    例如孩子数组为 [1, 2, 3],饼干数组为 [1, 1],则将尺寸为 1 的饼干分发给胃口为 1 的孩子,这个孩子将得到满足,而另外的两个孩子无法得到满足。那么得到满足的孩子个数为 1 个。

    输入描述
    第一行输入两个整数 N,M (1 <= N,M <= 1000)。N 表示孩子数量,M 表示饼干数量。

    第二行输入孩子数组 A,Ai 
      表示第 i 个孩子胃口。

    第三行输入饼干数组 B,Bi
      表示第 i 块饼干的尺寸。

    输出描述
    输出一行,为得到满足的孩子个数。

    输入输出样例
    示例
    输入

    3 2
    1 2 3
    1 1

    输出

    1

    运行限制
    最大运行时间:1s
    最大运行内存: 256M

    思路分析:

    饼干是不是想尽量喂饱需求更大的孩子?

    能不能用当前最大的饼干去喂需求量最大的孩子?如果最大的饼干不能喂需求最大的孩子说明该孩子不能吃饱

    1. import java.util.Arrays;
    2. import java.util.Scanner;
    3. public class Main {
    4. public static void main(String[] args) {
    5. Scanner sc = new Scanner(System.in);
    6. int n=sc.nextInt();
    7. int m=sc.nextInt();
    8. //a孩子 b饼干
    9. int[] a=new int[n];
    10. int[] b=new int[m];
    11. for(int i=0;i
    12. a[i]=sc.nextInt();
    13. }
    14. for(int i=0;i
    15. b[i]=sc.nextInt();
    16. }
    17. Arrays.sort(a);
    18. Arrays.sort(b);
    19. int l=n-1;
    20. int r=m-1;
    21. int ans=0;
    22. while(l>=0&&r>=0) {
    23. //当前最大的饼干可以满足当前最大需求的孩子
    24. if(b[r]>=a[l]) {
    25. ans++;
    26. r--;
    27. l--;
    28. }else {
    29. //孩子喂不饱
    30. l--;
    31. }
    32. }
    33. System.out.println(ans);
    34. }
    35. }

     

  • 相关阅读:
    MobaXterm 突破14个session限制
    Hibernate和MyBatis区别
    【Bootstrap】布局容器和栅格网络
    关于正在开发中的DjangoStarter v3版本
    吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化
    数据仓库【博学谷学习记录】
    中金所Java面试题整合
    ChatGPT研究论文提示词集合3-【数据收集】、【数据分析】和【解释与讨论】
    机房服务器远程维护解决方案,解决机房安全问题刚刚好
    分享一下怎么做陪诊小程序
  • 原文地址:https://blog.csdn.net/qq_58631644/article/details/128168626