栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

确定字符串具有所有唯一字符,无需使用其他数据结构,也无需假设使用小写字符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

确定字符串具有所有唯一字符,无需使用其他数据结构,也无需假设使用小写字符

对于asccii字符集,您可以用4个long表示256位:您基本上是手工编码一个数组。

public static boolean isUniqueChars(String str) {    long checker1 = 0;    long checker2 = 0;    long checker3 = 0;    long checker4 = 0;    for (int i = 0; i < str.length(); ++i) {        int val = str.charAt(i);        int toCheck = val / 64;        val %= 64;        switch (toCheck) { case 0:     if ((checker1 & (1L << val)) > 0) {         return false;     }     checker1 |= (1L << val);     break; case 1:     if ((checker2 & (1L << val)) > 0) {         return false;     }     checker2 |= (1L << val);     break; case 2:     if ((checker3 & (1L << val)) > 0) {         return false;     }     checker3 |= (1L << val);     break; case 3:     if ((checker4 & (1L << val)) > 0) {         return false;     }     checker4 |= (1L << val);     break;        }     }    return true;}

您可以使用以下代码为Unipre字符生成类似方法的主体:

static void generate() {    StringBuilder sb = new StringBuilder();    for (int i = 0; i < 1024; i++) {        sb.append(String.format("long checker%d = 0;%n", i));    }    sb.append("for (int i = 0; i < str.length(); ++i) {n" + "int val = str.charAt(i);n" + "int toCheck = val / 64;n" + "val %= 64;n" + "switch (toCheck) {n");    for (int i = 0; i < 1024; i++) {        sb.append(String.format("case %d:n"     + "if ((checker%d & (1L << val)) > 0) {n"     + "return false;n"     + "}n"     + "checker%d |= (1L << val);n"     + "break;n", i, i, i));    }    sb.append("}n" + "}n" + "return true;");    System.out.println(sb);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号