Leetcode刷题100天—1980. 找出不同的二进制字符串(字符串)—day19

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—1980. 找出不同的二进制字符串(字符串)—day19相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

1980. 找出不同的二进制字符串

难度中等4收藏分享切换为英文接收动态反馈

给你一个字符串数组 nums ,该数组由 n互不相同 的二进制字符串组成,且每个字符串长度都是 n 。请你找出并返回一个长度为 n没有出现nums 中的二进制字符串*。*如果存在多种答案,只需返回 任意一个 即可。

示例 1:

输入:nums = ["01","10"]
输出:"11"
解释:"11" 没有出现在 nums 中。"00" 也是正确答案。

示例 2:

输入:nums = ["00","01"]
输出:"11"
解释:"11" 没有出现在 nums 中。"10" 也是正确答案。

示例 3:

输入:nums = ["111","011","001"]
输出:"101"
解释:"101" 没有出现在 nums 中。"000""010""100""110" 也是正确答案。

提示:

  • n == nums.length
  • 1 <= n <= 16
  • nums[i].length == n
  • nums[i]'0''1'
package 水题;

import java.util.HashSet;
import java.util.Set;
/*
*https://leetcode-cn.com/problems/find-unique-binary-string/
*/

public class _1980_找出不同的二进制字符串 {
//	通过哈希表来判断
    public String findDifferentBinaryString(String[] nums) {
//    	先判断n的长度
    	int len=nums[0].length();
    	Set<String> map=new HashSet<>();
    	for(String num:nums) {
    		map.add(num);
    	}
//    	字符由0和1组成,所以我们遍历判断他是否在map中
    	
//    	遍历比nums里面的数更多的一个数就够了
    	for(int i=0;i<=nums.length;i++) {
//    		设置保存字符串,在 StringBuilder 上的主要操作是 append 和 insert 方法。
    		StringBuilder str=new StringBuilder();
//    		通过for循环组成二进制
    		for(int j=0;j<len;j++) {
//    			通过无符号右移运算符>>>和与&符号(是1就是1,否则都为0)
    			str.append( i>>> j&1);
//    			第一次遍历i右移j位
    		}
//    		最后逆转,比如这样输出顺序就是00,01,10,这里没有11,不过没关系,
    		//题目是nums[i].length == n,所以最多只要三个就能判断
    		str.reverse();
    		if(!map.contains(str.toString())) {
    			return str.toString();
    		}
    	}
    	return "";
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—1980. 找出不同的二进制字符串(字符串)—day19的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22

Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22

Leetcode刷题100天—2028. 找出缺失的观测数据(数组)—day56

Leetcode刷题100天—2028. 找出缺失的观测数据(数组)—day56

Leetcode刷题100天—1979. 找出数组的最大公约数(数学)—day19

Leetcode刷题100天—1979. 找出数组的最大公约数(数学)—day19