输入一个字符串,输出其中只出现了一次的字符及其下标
时间: 2023-05-31 22:18:51 浏览: 135
### 回答1:
可以使用字典来记录每个字符出现的次数,然后再遍历一遍字符串,输出只出现一次的字符及其下标。
具体实现如下:
```python
s = input("请输入一个字符串:")
d = {} # 用字典记录每个字符出现的次数
for i, c in enumerate(s):
if c in d:
d[c] += 1
else:
d[c] = 1
for i, c in enumerate(s):
if d[c] == 1:
print("字符 %s 在字符串中的下标为 %d" % (c, i))
```
例如,对于输入字符串 "hello world",输出结果为:
```
字符 h 在字符串中的下标为
字符 e 在字符串中的下标为 1
字符 w 在字符串中的下标为 6
字符 r 在字符串中的下标为 8
字符 d 在字符串中的下标为 10
```
### 回答2:
输入一个字符串,要输出其中只出现了一次的字符及其下标,可以采用哈希表的方式来解决。
首先,我们可以创建一个大小为256的数组来记录每个字符出现的次数,需要注意的是这里的256是因为ASCII码中的字符范围是0-255。
接着,我们遍历字符串,每遇到一个字符,就在对应的数组下标处将值加1。
最后,再次遍历字符串,并在对应的数组下标处查找是否只出现了一次,如果是,就输出该字符及其下标。
具体代码如下:
``` python
def find_unique_char(s):
if not s:
return "输入为空字符串"
# 创建数组
char_count = [0] * 256
# 遍历字符串,统计每个字符出现的次数
for char in s:
char_count[ord(char)] += 1
# 再次遍历字符串,查找只出现了一次的字符
res = []
for i in range(len(s)):
if char_count[ord(s[i])] == 1:
res.append((s[i], i))
return res
```
其中,ord()函数是将字符转化为ASCII码。
这个方法的时间复杂度为O(n),其中n是字符串的长度。由于数组的大小是固定的256,因此空间复杂度为常数级别。因此,该方法比较高效,适用于字符串长度不太大的情况。
### 回答3:
要解决这个问题,我们可以使用哈希表来记录每个字符出现的次数和下标。首先,我们可以用一个数组来表示哈希表,数组下标是字符的ASCII码值,数组元素是一个结构体,包含字符出现的次数和下标。
接下来,我们遍历输入的字符串,在遍历的同时更新哈希表。对于每个字符,我们可以将其转换为ASCII码值,并在哈希表对应的元素上增加字符出现的次数,将下标存入结构体中。在遍历完成后,我们可以再次遍历哈希表,输出出现次数为1的字符及其下标。
以下是代码实现:
```
typedef struct {
int count;
int idx;
} CharInfo;
void printUniqueChar(const char* str) {
if (str == NULL) {
return;
}
CharInfo hash[256] = {0};
int len = strlen(str);
for (int i = 0; i < len; i++) {
int ascii = (int)str[i];
hash[ascii].count++;
hash[ascii].idx = i;
}
for (int i = 0; i < 256; i++) {
if (hash[i].count == 1) {
printf("'%c' at index %d\n", (char)i, hash[i].idx);
}
}
}
```
函数接受一个输入字符串,并利用哈希表统计每个字符出现的次数和下标。然后再次遍历哈希表,输出出现次数为1的字符及其下标。
这样,我们就可以输出输入字符串中只出现了一次的字符及其下标了。
阅读全文