Java C++题解leetcode判定是否为字符重排

 更新时间:2022年09月29日 15:01:51   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++题解leetcode判定是否为字符重排,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目要求

思路一:排序

Java

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if(s1.length() != s2.length())
            return false;
        char[] sort1 = s1.toCharArray();
        Arrays.sort(sort1);
        char[] sort2 = s2.toCharArray();
        Arrays.sort(sort2);
        return Arrays.equals(sort1, sort2);
    }
}
  • 时间复杂度:O(n log n),排序复杂度
  • 空间复杂度:O(n),拷贝字符串用于排序

C++

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if (s1.size() != s2.size())
            return false;
        sort(s1.begin(), s1.end());
        sort(s2.begin(), s2.end());
        return s1 == s2;
    }
};
  • 时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn),排序复杂度
  • 空间复杂度:O(log⁡n)O(\log n)O(logn),排序需要

Rust

impl Solution {
    pub fn check_permutation(s1: String, s2: String) -> bool {
        if s1.len() != s2.len() {
            false
        }
        else {
            let (mut sort1, mut sort2) = (s1.as_bytes().to_vec(), s2.as_bytes().to_vec());
            sort1.sort();
            sort2.sort();
            sort1 == sort2
        }
    }
}
  • 时间复杂度:O(n log⁡ n),排序复杂度
  • 空间复杂度:O(n),拷贝字符串用于排序

思路二:词频统计

Java

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if(s1.length() != s2.length())
            return false;
        int[] freq = new int[128];
        int diff = 0;
        for (int i = 0; i < s1.length(); i++) {
            if (++freq[s1.charAt(i)] == 1)
                diff++;
            if (--freq[s2.charAt(i)] == 0)
                diff--;
        }
        return diff == 0;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(C),常数C为字符集大小

C++

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if (s1.size() != s2.size())
            return false;
        int freq[128];
        memset(freq, 0, sizeof(freq));
        int diff = 0;
        for (int i = 0; i < s1.size(); i++) {
            if (++freq[s1[i]] == 1)
                diff++;
            if (--freq[s2[i]] == 0)
                diff--;
        }
        return diff == 0;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(C),常数C为字符集大小

Rust

impl Solution {
    pub fn check_permutation(s1: String, s2: String) -> bool {
        s1.len() == s2.len() && s1.bytes().zip(s2.bytes()).fold(vec![0; 128], |mut freq, (c1, c2)| {
            freq[c1 as usize] += 1;
            freq[c2 as usize] -= 1;
            freq
        }).into_iter().all(|diff| diff == 0)
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(C),常数C为字符集大小

总结

简单模拟题、快乐结束~

有些语言不能改的字符串在这种时候真是烦烦……

以上就是Java C++题解leetcode判定是否为字符重排的详细内容,更多关于Java C++ 判定是否为字符重排的资料请关注脚本之家其它相关文章!

相关文章

  • Visual Studio Code配置C/C++开发环境的教程图解

    Visual Studio Code配置C/C++开发环境的教程图解

    这篇文章主要介绍了Visual Studio Code配置C/C++开发环境的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • C语言顺序表实现代码排错

    C语言顺序表实现代码排错

    这篇文章主要介绍了C语言顺序表实现方法,大家参考使用吧
    2013-12-12
  • C++ 中国象棋的实现流程详解

    C++ 中国象棋的实现流程详解

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动
    2021-11-11
  • 常用排序算法整理分享(快速排序算法、希尔排序)

    常用排序算法整理分享(快速排序算法、希尔排序)

    这篇文章主要介绍了一些常用排序算法整理,插入排序算法、直接插入排序、希尔排序、选择排序、冒泡排序等排序,需要的朋友可以参考下
    2014-03-03
  • C++实现井字棋游戏

    C++实现井字棋游戏

    这篇文章主要为大家详细介绍了C++实现井字棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C++ 17转发一个函数调用的完美实现

    C++ 17转发一个函数调用的完美实现

    这篇文章主要给大家介绍了关于C++ 17如何转发一个函数调用的完美实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C++17具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • C++ 再识类和对象

    C++ 再识类和对象

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数
    2021-10-10
  • C语言实例上手深入理解操作符的使用

    C语言实例上手深入理解操作符的使用

    C 语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符等。接下了让我们在实例中练一下
    2022-05-05
  • C++如何通过ostringstream实现任意类型转string

    C++如何通过ostringstream实现任意类型转string

    再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
    2013-09-09
  • C语言中的数组和指针汇编代码分析实例

    C语言中的数组和指针汇编代码分析实例

    这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下
    2015-06-06

最新评论