Leetcode821. 字符的最短距离

题目

给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。

示例 1:

输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]

说明:

字符串 S 的长度范围为 [1, 10000]。
C 是一个单字符,且保证是字符串 S 里的字符。
S 和 C 中的所有字母均为小写字母。

解题思路

遍历字符串,以每个字符为中心,同时对比左右两边的字符是否相等于目标字符串。

C++解法

#include 
#include 
#include 
using namespace std;
class Solution {
public:
    vector shortestToChar(string S, char C) {
        vector vector;
        for (int i = 0; i < S.size(); i++) {
            int j = 0;
            while (true) {
                int before_index = i - j;
                int after_index = i + j;
                if (before_index >= 0 || after_index < S.size()) {
                    bool matched = (before_index >= 0 && S[before_index] == C) || (after_index < S.size() && S[after_index] == C);
                    if (matched) {
                        vector.push_back(j);
                        break;
                    } else {
                        j++;
                    }
                } else {
                    vector.push_back(-1);
                    break;
                }
            }
        }
        return vector;
    }
};
int main(int argc, const char * argv[]) {
    // insert code here...
    string S = "loveleetcode";
    char C = 'e';
    Solution solution;
    vector vector = solution.shortestToChar(S, C);
    for (auto i: vector) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-distance-to-a-character
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode821. 字符的最短距离)