Shortest Distance to a Character 字符的最短距离

给定一个字符串 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 中的所有字母均为小写字母。

思路:遍历两次数组,第一次从左向右判断S中任意字符离左边最近的C的距离,然后再从右向左遍历判断S中任意字符离右边最近的C的距离,两次遍历取最小值即可。

参考代码:

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






给定一个字符串 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 中的所有字母均为小写字母。

你可能感兴趣的:(算法)