题目
在一个字符串(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);
}
}