Skip to content

Latest commit

 

History

History
80 lines (71 loc) · 1.86 KB

oddstring.md

File metadata and controls

80 lines (71 loc) · 1.86 KB

题目描述:

image

解决过程:

做了好久

代码:(我的→题解)

class Solution {
public:
    vector<int> string2diff(string& str) {
        int n = str.size();
        vector<int> ans (n - 1);
        for (int i = 1; i < n; i++) {
            ans[i-1] = str[i] - str[i-1];
        }
        return ans;
    }

    void test(const vector<int>& tmp) {
        for (auto i : tmp) {
            cout << i << ' ';
        }
        cout << endl;
    }

    string oddString(vector<string>& words) {
        int n = words[0].size();
        vector<int> origin (n - 1);
        int ans;
        bool diff = false;
        for (int i = 0; i < words.size(); i++) {
            auto tmp = string2diff(words[i]);
            // test(tmp);
            if (i == 0) {
                origin = tmp;
            } else if (diff) {
                ans = origin == tmp ? 1 : 0;
                break;
            } else if (origin != tmp) {
                if (i > 1) {
                    ans = i;
                    break;
                }
                diff = true;
            }
        }
        return words[ans];
    }
};
class Solution {
public:
    vector<int> get(string &word) {
        vector<int> diff(word.size() - 1);
        for (int i = 0; i + 1 < word.size(); i++) {
            diff[i] = word[i + 1] - word[i];
        }
        return diff;
    }

    string oddString(vector<string>& words) {
        auto diff0 = get(words[0]);
        auto diff1 = get(words[1]);
        if (diff0 == diff1) {
            for (int i = 2; i < words.size(); i++) {
                if (diff0 != get(words[i])) {
                    return words[i];
                }
            }
        }
        return diff0 == get(words[2]) ? words[1] : words[0];
    }
};