java-Java 如何更好地判断一个字符串是一个字符串打乱顺序后的字符串

问题描述

Java 如何更好地判断一个字符串是一个字符串打乱顺序后的字符串

a="csdnnet"; b="descntn" ---> return true
a="hello"; b="oelhg" --->return false

解决方案

Java中如何判断一个字符串的格式
java 如何判断一个字符串是数字
Java中怎样判断一个字符串是否为数字

解决方案二:

算法思想:首先两个字符串长度必须相等;其次,目标串中的各个字符必须都包含在原串中;
第三,目标串种各个字符的个数必须跟原串中对应字符的个数一样。
实例代码:

 import java.util.HashMap;
import java.util.Map;

public class StringOrderUtil {
    public static boolean isScrambledString(String source,String target){
        if(source==null||target==null){
            throw new IllegalArgumentException("source or target is null.");
        }

        if(source.length()!=target.length()){
            System.out.println("target string's length is not equal to source length.");
            return false;
        }

        //目标串中每个字符都包含在原串中
        int length = source.length();
        Map<Character,Integer> targetCount = new HashMap<Character,Integer>();
        for(int i =0;i<length;i++){
            char c = target.charAt(i);
            //target中某个字符不在原串中,返回false
            int indexOfSource = source.indexOf(c);
            if(indexOfSource==-1){
                return false;
            }

            //统计该串在本串中的个数
            if(targetCount.get(c)==null){
                targetCount.put(c, 1);
            }else{
                Integer count = targetCount.get(c);
                targetCount.put(c, 1+count);
            }
        }

        //统计原串中各个字符的个数
        Map<Character,Integer> sourceCount = new HashMap<Character,Integer>();
        for(int i =0;i<length;i++){
            char c = source.charAt(i);
            if(sourceCount.get(c)==null){
                sourceCount.put(c, 1);
            }else{
                Integer count = sourceCount.get(c);
                sourceCount.put(c, 1+count);
            }
        }

        //目标串中每个字符个数跟原串中对应字符的个数一样
        for(Map.Entry<Character, Integer> entry:targetCount.entrySet()){
            Character key = entry.getKey();
            if(entry.getValue()!=sourceCount.get(key)){
                return false;
            }
        }

        //目标串中的每个元素都在原串中,且对应个数相同
        return true;
    }

    public static void main(String[] args) {
        String a = "csdnnet";
        String b = "descntn";
        boolean result = isScrambledString(a,b);
        System.out.println(result);

        //个数不同
        b =  "descnnn";
        result = isScrambledString(a,b);
        System.out.println(result);
    }
}

测试通过,OK。

解决方案三:

用用hashmap统计每种字符的个数然后比较两个hashmap

时间: 2024-11-02 21:53:01

java-Java 如何更好地判断一个字符串是一个字符串打乱顺序后的字符串的相关文章

关于Java Scripting API您不知道的5件事,Java平台上更简单的脚本编写方法

现在,许多Java开发人员都喜欢在Java平台中使用脚本语言,但是使用编译到 Java 字节码中的动态语言有时是不可行的.在某些情况中,直接编写一个 Java 应用程序的脚本 部分 或者在一个脚本中调用特定的 Java 对象是更快捷.更高效的方法. 这就是 javax.script 产生的原因了.Java Scripting API 是从 Java 6 开始引入的,它填补了便捷的小脚本语言和健壮的 Java 生态系统之间的鸿沟.通过使用 Java Scripting API,您就可以在您的 Ja

system.out.printf()-java中输出中的条件判断输出

问题描述 java中输出中的条件判断输出 public void showLine(){ System.out.println("直线"+A+"*x"+B+"*y"+C+"=0"); } 我想在B>0时在输出B的前面加一个+号,但是直接在里面用条件?:让输出+判断它说类型不对,可不可以直接在里面就判断了就输出了呢?不用写if再输出 解决方案 System.out.println("直线"+A+&quo

c#-C#与java那个应该更值得一直从事下去?两个都用怎么样?

问题描述 C#与java那个应该更值得一直从事下去?两个都用怎么样? 以前一直是做java的,换了家公司,改用C#了.做C#的同时,我又不想放弃掉java,个人还是比较喜欢java的. 解决方案 C#与java那个应该更值得一直从事下去? 回答:其实这两个是语言没有什么差别的,只要你最终掌握了面向对象的使用,他们的核心概念都是相同用的,区别只是使用的语言不用而已.打个比方就比如你去大型超市购物,目的都是买东西,最后去付款时,你可以选择支付现金又或者刷卡,而C#和Java相当于一个是支付现金一个是

文件类型判断-java文件类型如何准确进行判断呢

问题描述 java文件类型如何准确进行判断呢 目前需要进行对docx和zip格式文件进行判断,判断后缀名肯定不行(后缀名可以恶意更改),头文件解析的话docx和zip的头文件时相同的,还有什么方式能准确区分这两种类型的文件的? 解决方案 感谢 dxxy0的解答,采用解析头文件16进制字符串的方式,docx和zip的文件头都是504B0304,所以这种方式是无法区分的,docx是基于XML的zip压缩文件格式,本质上就是一个ZIP必须件,但需求要求必须区分这两种文件格式,到底该怎么区分呢? 解决方

java中这两个构造方法一个队,一个错?感觉没有区别啊?

问题描述 java中这两个构造方法一个队,一个错?感觉没有区别啊? 第一种: public class point { private double x; private double y; public point(){ this(0,0); } public point(double x, double y){ this.x = x; this.y = y; } } 第二种 public class point { private double x; private double y; pu

施乐-Java 输出格式,怎么令所有的宽度都由一个常量控制?

问题描述 Java 输出格式,怎么令所有的宽度都由一个常量控制? 新手求大神指点 例如: System.out.printf ( " %15s %10.2f n" ,String1, Float1); 这一句里,String 的输出宽度是 15 , Float1 的输出宽度是 10. 我希望,输出宽度都能够由一个常量控制,类似: int width=9; System.out.printf (" %widths %widthf n", String1,Float1

java购物车问题-java关于商城购物车(cookie基于实现)的一个问题

问题描述 java关于商城购物车(cookie基于实现)的一个问题 当设计购物车不登录可以操作,当提交订单是进行登录并且将购物车订单提交. 这种模式有什么不好的地方? 解决方案 最终它都得去注册一个号才能买东西 解决方案二: 这种模式有什么不好的吗?我学的也是这种啊... 购物车用cookie,可以减少服务端数据传输的压力 而提交订单,那么必须向数据库传输数据了,所以必须要登陆... 解决方案三: 要说缺陷的话,我想可能是cookie上的缺陷了 解决方案四: 好处比坏处多,缺陷就是用户清除浏览器

java中方法定义的时候是不允许嵌套一个方法吗

问题描述 java中方法定义的时候是不允许嵌套一个方法吗 java中方法定义的时候是不允许嵌套一个方法吗内部类分为静态和非静态的吗 解决方案 是不允许的,已经明白了 解决方案二: java方法重写的时候,一个调用父类还是子类方法的问题 解决方案三: 静态内部类和非静态内部类的区别 解决方案四: 当然不允许了.....

hook-windows下如何把一个jar注入一个java进程

问题描述 windows下如何把一个jar注入一个java进程 如题, 其实我想hook一个java进程内的某一个类库. 想做到像windows下的dll注入到一个进程里并hook api一样的效果. 对java程序该如何做,谢谢