题目
给定一个字符串 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 <iostream>
#include <vector>
#include <map>
using namespace std;
class Solution {
public:
vector<int> shortestToChar(string S, char C) {
vector<int> 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<int> 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。