您的位置:首页 > 其它

在一个字符串中找到第一个只出现一次的字符

2013-10-31 22:16 218 查看
public class A14 {

/**
* 在一个字符串中找到第一个只出现一次的字符
* 如输入baccdeff,则输出b。
* @param args
*/
public static void main(String[] args) {
String testString = "bac";
System.out.println(getFirstSingle(testString));

}

/**
* 因为字符只有256种可能,所以我们可以申请一个256大小的数组来
* 统计每个字符出现的次数(以空间换时间),
* 统计完后,我们以原数组的元素值为下表,访问统计数组,
* 直到遇到第一个访问数组元素值为1的元素,
* 其所在位置的字符即为第一个只出现一次的字符。
* @param testString
* @return
*/
private static char getFirstSingle(String testString) {
int length = 'z' - 'A';
int[] temp =new int[length];
int i = 0,j=0;
for(;i<testString.length();i++){
temp[testString.charAt(i)-'A']++;
}

for(;j<testString.length();j++){
if(temp[testString.charAt(j)-'A'] == 1){
return testString.charAt(j);
};
}
return 0;
}

/**
* 不知道还有没有更加灵敏的算法,感觉上面的应该比较的接近了,
* 首先是必须扫描一遍吗?这个恐怕是必须的,不遍历
* 一遍,不可能确认候选的元素的是正确的。再者说存储空间,
* 有可能比上面的少吗?有把'a'到'Z'之间的空间去掉
* 但是在位图中,需要加入判断,可能会得不偿失,数据量比较大的话。
* */

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 位图
相关文章推荐