zoukankan      html  css  js  c++  java
  • 字符串置换问题

    最近在lintcode上刷题,遇到这一问题。

    问题描述:

    给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。

    置换的意思是通过改变顺序可以使得两个字符串相等。
    输入样例:
    "abc" 为 "cba" 的置换。
    "abbc" 不是 "abcc" 的置换。

    解决思路:

    可通过排序来解决此问题,将其转换为字符数组,首先判断字符串长度是否相等,如果不相等则不是置换,二是判断为空字符串这一特殊情况,最后可通过Arrays.sort()这一方法对数组进行排序,比较这两个数组是否相等。如果相等,则为置换,如果不相等,则不是置换

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5 
     6     public static void main(String[] args) {
    7 Scanner in = new Scanner(System.in);
    8 while(in.hasNext()){ //多组数据输入
    9 String str1 = in.next(); //输入字符串str1
    10 String str2 = in.next(); //输入字符串str2
    11 boolean x = Main.f(str1, str2); //调用函数
    12 if(x==true){
    13 System.out.println("str1是str2的置换");
    14 } 15 else{
    16 System.out.println("str1不是str2的置换");
    17 } 18 } 19 } 20 public static boolean f(String s1,String s2){ //判断是否为置换的函数
    21 char ch1[] = s1.toCharArray(); //转换为字符数组
    22 char ch2[] = s2.toCharArray();
    23 if(s1.length()!=s2.length()){ //判断长度是否相等
    24 return false;
    25 }
    26 if(s1.equals("")&&s1.equals("")){ //判断空字符串这一特殊情况
    27 return true;
    28 }
    29 Arrays.sort(ch1); //数组排序
    30 Arrays.sort(ch2);
    31 boolean m = true;
    32 int j=0;
    33 for(int i=0;i<s1.length();i++){ //比较排序后的数组是否相等
    34 if(ch1[i]!=ch2[j])
    35 m = false;
    36 j++;
    37 }
    38 return m;
    39 } 40 }

     另一种思路:

    转换为数组后进行排序,再变为字符串看是否相等,代码如下:

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5 
     6     public static void main(String[] args) {
     7         
     8         Scanner in = new Scanner(System.in);
     9         
    10        while(in.hasNext()){        //多组输入
    11            String str1 = in.next();
    12            String str2 = in.next();
    13            char ch1[] = str1.toCharArray();     //转换为字符数组
    14            char ch2[] = str2.toCharArray();        //转换为字符数组
    15            Arrays.sort(ch1);    //数组排序
    16            Arrays.sort(ch2);    //数组排序
    17            StringBuffer sb1 = new StringBuffer(); 
    18            for(char ch:ch1){    
    19                sb1.append(ch);        //遍历,加到StringBuffer对象中取
    20            }
    21            StringBuffer sb2 = new StringBuffer(); 
    22            for(char c:ch2){
    23                sb2.append(c);
    24            }
    25            if(sb1.toString().equals(sb2.toString())){    //判断是否相等
    26                System.out.println("Yes");
    27            }
    28            else 
    29                System.out.println("no");
    30     }
    31     }
    32 }
  • 相关阅读:
    Jenkins 构建自动化 .NET Core 发布镜像
    浅入Kubernetes(13):dashboard、api、访问配置
    浅入Kubernetes(12):Deployment 的升级、回滚
    浅入Kubernetes(11):了解 Service 和 Endpoint
    浅入Kubernetes(8):外网访问集群
    浅入Kubernetes(10):控制节点的部署,选择器、亲和性、污点
    浅入Kubernetes(9):了解组件
    浅入Kubernetes(7):应用部署实例,Deployment、Service、ReplicaSet
    浅入kubernetes(5):尝试kubeadm
    《MySQL技术内幕-InnoDB存储引擎》整理6-事务
  • 原文地址:https://www.cnblogs.com/cppeterpan/p/6980010.html
Copyright © 2011-2022 走看看