📜  门| GATE-CS-2017(套装1)|第 51 题(1)

📅  最后修改于: 2023-12-03 15:42:19.073000             🧑  作者: Mango

题目描述

在这道题中,你需要实现一个算法,用于在给定的字符串中查找指定的字符,并在找到时返回该字符的位置。如果未找到,则返回-1。该算法的时间复杂度应为O(n),其中n是字符串的长度。

输入格式

输入格式为两行。第一行为一个字符串S,第二行为一个字符C。

输出格式

输出格式为一个整数,表示字符C在字符串S中的位置。

编程要求
  • 语言限制:C或C++或Java或Python。
  • 时间限制:1s
  • 内存限制:256MB

#解题思路

该题中我们需要在字符串中查找指定的字符,并且时间复杂度需要控制在O(n)的级别。由于C、C++、Java和Python都已经内置了时间复杂度为O(n)的函数,因此我们只需要对这几个函数稍作修改,即可通过本题。以下是具体的解题思路:

C/C++解法
#include <stdio.h>
#include <string.h>

int main()
{
    char S[1000], C;
    int i, pos = -1;
    scanf("%s\n%c", &S, &C);
    for (i = 0; i < strlen(S); i++) {
        if (S[i] == C) {
            pos = i;
            break;
        }
    }
    printf("%d", pos);
    return 0;
}

这是一份较为简单的C/C++代码。我们首先输入字符串S和字符C,然后对字符串S进行遍历,除非找到了字符C,否则不断进行循环。当找到字符C时,我们输出它的位置并跳出循环。最后,如果没有找到字符C,我们则返回-1。请注意,这里的时间复杂度为O(n),其中n是字符串S的长度。因此,该算法可以通过本题。

Java解法
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String S = in.readLine();
        char C = in.readLine().charAt(0);
        int pos = -1;
        for (int i = 0; i < S.length(); i++) {
            if (S.charAt(i) == C) {
                pos = i;
                break;
            }
        }
        System.out.println(pos);
    }
}

在Java中,我们需要使用BufferedReader读入数据,并遵从Java习惯使用I/O异常处理机制。此外,注意我们需要将字符C转化为char类型。其他方面,代码与C/C++基本相同。

Python解法
S = input()
C = input()
pos = -1
for i in range(len(S)):
    if S[i] == C:
        pos = i
        break
print(pos)

与C/C++和Java代码类似,Python代码也非常简洁。我们读入数据后对字符串S进行遍历,直至找到字符C为止。如果找到了字符C,则输出它的位置并跳出循环,否则最终输出-1。注意,这里的时间复杂度为O(n),其中n是字符串S的长度。

总结

在本题中,我们实现了一种查找指定字符的算法,并将其时间复杂度控制在O(n)的级别。为了实现这一算法,我们需要遍历字符串,并使用if语句进行比较。虽然C、C++、Java和Python中都有内置函数可以实现该算法,但本题的重点在于你是否理解了算法的实现过程。因此,在应对类似的题目时,请务必不断提高对基础算法的掌握水平。