【剑指offer】面试题50(1):第一个只出现一次的字符

来源:互联网 发布:手机淘宝同城在哪里找 编辑:程序博客网 时间:2024/06/11 13:22

题目

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

思路

哈希表

代码

/** * 题目: * 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 *  * 思路: * 哈希表 *  * @author peige */public class _50_01_FirstNotRepeatingChar {    public static int FirstNotRepeatingChar(String str) {        if(str == null || str.length() == 0)            return -1;        int[] ch = new int[256];        for(int i = 0; i < str.length(); ++i) {            ++ch[str.charAt(i)];        }        for(int i = 0; i < str.length(); ++i) {            if(ch[str.charAt(i)] == 1) {                return i;            }        }        return -1;    }}

测试

public class _50_01_Test {    public static void main(String[] args) {        test1();        test2();        test3();    }    private static void test1() {        int index;        index = _50_01_FirstNotRepeatingChar.FirstNotRepeatingChar("aabcdcb");        MyTest.equal(index, 4);        index = _50_01_FirstNotRepeatingChar.FirstNotRepeatingChar("abcdefg");        MyTest.equal(index, 0);    }    /**     * 边界测试     */    private static void test2() {        int index;        index = _50_01_FirstNotRepeatingChar.FirstNotRepeatingChar("a");        MyTest.equal(index, 0);        index = _50_01_FirstNotRepeatingChar.FirstNotRepeatingChar("aabbb");        MyTest.equal(index, -1);    }    /**     * 极端测试     */    private static void test3() {        int index;        index = _50_01_FirstNotRepeatingChar.FirstNotRepeatingChar("");        MyTest.equal(index, -1);        index = _50_01_FirstNotRepeatingChar.FirstNotRepeatingChar(null);        MyTest.equal(index, -1);    }}
阅读全文
0 0