问了自己的项目,问有没有一些自己的创新。问了英语水平,让英语介绍了一下自己的专业。

手撕代码(没做出来淦,估计凉了):

更新!的确是凉了!

第一个只出现一次的字符

在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

数据范围:0<=n<=10000,且字符串只有字母组成。

要求:空间复杂度 O(n),时间复杂度O(n)。

示例1

输入:"google"        输出:4

示例2

输入:"aa"        输出:-1

答案:

解题思路想法比较直接,构建数组count【26】,第一次遍历记录各字母出现了几次并改写count,第二次遍历从输入字符串头开始找,找到第一个count为1的,就是第一次只出现一次的。由于是两次遍历,时间复杂度是O(2N),空间复杂度是count的大小,即固定大小。

题目中因为一定要包含这个FirstNotRepeatingChar函数,所以写成这个样子,实际上是不用的。

#include<stdio.h>
#include<string.h>
int FirstNotRepeatingChar( char* str ) 

int main () {
    char a[10000];
    int rls;
	gets(a);
    rls=FirstNotRepeatingChar(a);
    
	if (rls==-1)
		printf("\n-1");
    else 
		printf("\n%c",a[rls]);
	return 0;
}

int FirstNotRepeatingChar( char* str ) {
    int i, count[26]={0};
    for (i=0;i<strlen(str);i++) {
        count[str[i]-'a']++;
    }
    for (i=0;i<strlen(str);i++) {
        if (count[str[i]-'a']==1) return i; 
    }
    return -1;
}


Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐