首页 技术 正文
技术 2022年11月14日
0 收藏 777 点赞 3,226 浏览 1128 个字
题目描述:

在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。

输入:

输入有多组数据
每一组输入一个字符串。

输出:

输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。

样例输入:
ABACCDEFF
AA
样例输出:
1
-1

分析:

这道面试题对时间复杂度的要求是O(n)。如果按照普通的遍历数组的方法,时间复杂度为O(n2),那么思考一下如何用O(n)的算法解决此问题。利用HashTable的思想,就可以做到O(n),由于ASCII中有256个字符,为0-255,用一个字节表示。将数组map[256]作为哈希表,数组下标为字符,数组中的值对应字符出现的次数。第一遍扫描字符串,确定每个字符出现的次数。第二遍扫描字符串,确定第一个只出现一次的字符。

总结:这类题目很具有代表性,在字符串处理的问题中,经常采用哈希表的方法来解决问题,因为散列查找是线性查找,所以往往可以得到最佳的时间复杂度O(n),除了寻找字符串中出现特定次数的字符外,删除字符串中重复出现的字符或者指定的字符,这类问题也可以采用哈希表的方法来解决。

代码:

 #include <cstdio>
#include <cstring> #define MAXSIZE 10001 int main() {
char str[MAXSIZE];
while (scanf("%s", str) != EOF) {
int map[] = {};
const char *p = str; while (*p != '\0')
map[*p++]++; int i;
for (i = ; i < strlen(str); i++) {
if (map[str[i]] == )
break;
}
if (i != strlen(str)) {
printf("%d\n", i);
} else {
printf("-1\n");
}
} return ;
}

扩展:

1.实现一个函数,给定两个字符串str1和str2,将字符串str1中出现在str2中的字符删除掉,例如str1=”Less is more”,str2=”sor”,返回”Le i me”

2.实现一个函数,删除字符串中所有重复出现的字符,例如”google”,返回”gole”

 char *deleteCharacters(char *p1, char *p2) {
int map[] = {};
while (*p2 != '\0')
map[*p2++]++; char *newStr = (char *) malloc(sizeof(char) * MAXSIZE);
char *p = newStr;
while (*p1 != '\0') {
if (map[*p1] == ) {
*p++ = *p1++;
} else {
p1++;
}
} return newStr;
}

还有一个留作练习,自己实现。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,484
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,899
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,732
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,485
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,125
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,286