如何判断一个英文单词中是否存在重复字母

如何判断一个英文单词中是否存在重复字母

English有26个字母,一个int类型占据32位,

设想一下,我们用这32位的前26位记录字母是否出现,初始为0,出现变1。

字符
a、b、c、d……、x、y、z
对应的hash值是
97、98、99、100……、120、121、122

那么
a-a、b-a、c-a、d-a……、x-a、y-a、z-a
对应
0、1、2、3……、23、24、25

我们用它来作为32位二进制中的下标index。

0的二进制,我们用它记录字母是否出现,暂且称它为content,
00000000 00000000 00000000 00000000
1的二进制
00000000 00000000 00000000 00000001

得到字母下标index后,我们将二进制右移index位,
再与1做与运算,结果为1说明index位置是1,出现过。

与运算&:两位同时为1时为1,否则为0。

否则我们就将二进制的index位置变为1。

具体
是将1的二进制左移index位,然后与content进行或运算。

或运算|:两位同时为0时为0,否则为1。

代码:

package com.example.duohoob.hash;

public class HashMapTest {

	public static void main(String[] args) {
		// 单词
		String word = "abcdefg";
		// 是否存在重复字母
		boolean flag = false;
		// 记录字母是否出现
		int content = 0;
		
		for (int i = 0; i < word.length(); i++) {
			char ch = word.charAt(i);
			// 下标
			int index = ch - 'a';
			// 将二进制右移index,再与1做&与运算。
			if (((content >> index) & 1) == 1) {
				// 结果为1说明index位置是1,出现过。
				flag = true;
				break;
			} else {
				// content的index位置变为1
				// 将1的二进制左移index位,
				// 然后与content进行|运算
				content = content | (1 << index);
			}
		}
		if (flag) {
			System.out.println("存在重复字母");
		} else {
			System.out.println("不存在重复字母");
		}
	}
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值