题目1:
实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。(不忽略大小写)
如果 str2 字符串是 str1 字符串的排列,则输出 YES
;如果 str2 字符串不是 str1 字符串的排列,则输出 NO
;
import java.util.Arrays; import java.util.Scanner; public class Test1 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); String s=scanner.nextLine(); String s1=scanner.nextLine(); char a[]=s.toCharArray(); char a1[]=s1.toCharArray(); Arrays.sort(a); Arrays.sort(a1); String s2=new String(a); String s3=new String(a1); if (s2.equals(s3)) { System.out.println("YES"); } else System.out.println("NO"); } }
题目2:
实现一个算法来压缩一个字符串。压缩的要求如下:
需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
压缩的格式是将连续相同字符替换为字符 + 数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"。
import java.util.Scanner; public class Test2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //输入一行字符串 String str=scan.next(); //StringBuffer用来存放处理后的数据 StringBuilder sb=new StringBuilder(); //第一层循环用来确定有多少个不同的字母 for(int i=0;i<str.length();i++){ //用来存放一样的字母 int count=0; int j=i; for(;j<str.length();j++){ //判断有几个一样的字母 if(str.charAt(i)==str.charAt(j)){ count++; } else{ break; } } if(count>1){ sb.append(str.charAt(i)); sb.append(count); i=j-1; } else{ sb.append(str.charAt(i)); } } //用来判断是否能压缩 if(sb.length()<str.length()){ System.out.print(sb.toString()); } else{ System.out.print("NO"); } scan.close(); } }