字符与数组问题

阅读 31

2022-03-13

题目:

实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?
解法:
一开始,不妨先问问面试官,上面的字符串是ASCII字符串还是Unicode字符串。这很重要,问这个问题表明你关注细节,并且对计算机科学有深刻了解。
为了简单起见,这里假定字符集为ASCII。若不是的话,则需扩大存储空间,不过其余逻辑没有分别。
假定字符集为ASCIl,对于这个问题,我们可以做一个简单的优化,若字符串的长度大于字母表中的字符个数,则直接返回false。毕竟,若字母表只有256个字符.字符串里就不可能有280个各不相同的字符。
第一种解法是构建一个布尔值的数组,索引值i对应的标记指示该字符串是否含有字母表第1个字符。若这个字符第二次出现,则立即返回false。
下面是这个算法的实现代码。
 

package 字符串问题;

public class case01_字符与数组问题 {
    public static void main(String[] args) {
        String s=new String();
        s="asdfag";
        System.out.println(new case01_字符与数组问题().different(s));
    }

    private static boolean different(String s) {
        int n=s.length();
        if(s.isEmpty()){
                return true;
        }
        int[] flag=new int[128];//以空间换时间
        //扫描字符串
        for(int i=0;i<n;i++){
            int c=(int)s.charAt(i);
            if(flag[c]>0){
                return false;
            }else{
                flag[c]++;
            }
        }
        return true;
    }
}

精彩评论(0)

0 0 举报