821. 字符的最短距离

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

示例 1:

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

说明:

  1. 字符串 S 的长度范围为 [1, 10000]
  2. C 是一个单字符,且保证是字符串 S 里的字符。
  3. S 和 C 中的所有字母均为小写字母。
    	vector<int> shortestToChar(string S, char C) {
		vector<int> res;
		for (int i = 0; i<S.size(); i++) {
			if (S[i] == C) {
				res.push_back(i);
			}
		}
		vector<int> res2;
		vector<int> res3;
		for (int i = 0; i<S.size(); i++) {
			for (int j = 0; j<res.size(); j++) {
				res2.push_back(abs(i - res[j]));
			}
			auto smallest = *min_element(res2.begin(), res2.end());
			res3.push_back(smallest);
			res2.clear();
		}
		return res3;
	}

class Solution {
public:
    vector<int> shortestToChar(string S, char C) {
        int n = S.size();
        vector<int> res(n, n);
        int pos = -n;
        for (int i = 0; i < n; ++i) {
            if (S[i] == C) pos = i;
            res[i] = min(res[i], abs(i - pos));
        }
        for (int i = n - 1; i >= 0; --i) {
            if (S[i] == C)  pos = i;
            res[i] = min(res[i], abs(i - pos));
        }
        return res;
    }
};

 vector<int> res(n, n); res有n个元素,每个元素都为n

猜你喜欢

转载自blog.csdn.net/sinat_26970269/article/details/81100211