LeetCode 833 Find And Replace in String

时间:2022-04-19 19:25:40

LeetCode 833

Find And Replace in String

  • Problem Description:
    题目给出四个已知条件:进行操作的字符串S,indexes数组(存储S中需进行替换的位置下标),sources数组(需要匹配S中有indexes数组中下标的子字符串是否与sources中对应子字符串相同),targets数组(如果匹配成功,将S中有indexes数组中下标的子字符串替换为targets中对应的子字符串)

    具体的题目信息:
    https://leetcode.com/problems/find-and-replace-in-string/description/

  • Example: 题目给出的例子如下所示
    LeetCode 833 Find And Replace in String
  • Solution:
    • 解题思路:
      (1)遍历S字符串的每个位置,在indexes数组中查找该位置是否需要进行替换,如果不需要,则将temp += S中对应字符
      (2)如果S字符串的某个位置在indexes数组中可以查找到,则比较从该起始位置起一段长度的字符串与sources数组中对应的字符串是否相同,如果不相同不进行替换,temp += S中对应字符串。如果相同,用targets数组中对应的字符串替换S中对应字符串,注意将遍历S字符串的下标进行相应的移动。
    • 编程实现:
class Solution {
public:
    string findReplaceString(string S, vector<int>& indexes, vector<string>& sources, vector<string>& targets) {
        if (indexes.size() == 0)
            return S;
        string temp = "";
        int flag = 0, j;
        for (int i = 0; i < S.length(); ) {
            for (j = 0;j < indexes.size(); j++) {
                if (i == indexes[j]) {
                    if (S.substr(i, sources[j].length()) == sources[j]) {
                        temp += targets[j];
                    } else {
                        temp += S.substr(i, sources[j].length());
                    }
                    flag = 1;
                    break;
                }
            }
            if (flag == 0) {
                temp += S[i];
                i++;
            } else {
                flag = 0;
                i+=sources[j].length();
            }
        }
        return temp;
    }
};