【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列
今天是堅持每日一題打卡的第二十四天
題目鏈接:https://leetcode-cn.com/problems/buddy-strings/
題解匯總:https://zhanglong.blog.csdn.net/article/details/121071779
題目描述
給你兩個字符串 s 和 goal ,只要我們可以通過交換 s 中的兩個字母得到與 goal 相等的結果,就返回 true ;否則返回 false 。
交換字母的定義是:取兩個下標 i 和 j (下標從 0 開始)且滿足 i != j ,接著交換 s[i] 和 s[j] 處的字符。
例如,在 “abcd” 中交換下標 0 和下標 2 的元素可以生成 “cbad” 。
示例 1:
輸入:s = “ab”, goal = “ba”
輸出:true
解釋:你可以交換 s[0] = ‘a’ 和 s[1] = ‘b’ 生成 “ba”,此時 s 和 goal 相等。
示例 2:
輸入:s = “ab”, goal = “ab”
輸出:false
解釋:你只能交換 s[0] = ‘a’ 和 s[1] = ‘b’ 生成 “ba”,此時 s 和 goal 不相等。
示例 3:
輸入:s = “aa”, goal = “aa”
輸出:true
解釋:你可以交換 s[0] = ‘a’ 和 s[1] = ‘a’ 生成 “aa”,此時 s 和 goal 相等。
示例 4:
輸入:s = “aaaaaaabc”, goal = “aaaaaaacb”
輸出:true
提示:
1 <= s.length, goal.length <= 2 * 104
s 和 goal 由小寫英文字母組成
分三種情況討論:
class Solution { public:bool buddyStrings(string s, string goal) {int vis[26 + 5] = {0};if (s == goal) { // 情況1for (auto i : s) {if (vis[i-'a'] != 0) return true;vis[i-'a']++;}return false;} else { // 情況2int len1 = s.size(), len2 = goal.size();if (len1 != len2) return false; // 長度不相等int first = -1, second = -1;for (int i = 0; i < len1; i++) {if(s[i] != goal[i]) {if(first == -1) {first = i;} else if(second == -1) {second = i;} else {return false;}}}if (first == -1 || second == -1) return false;return ((s[first] == goal[second] && s[second] == goal[first]) ? true : false);}} };
總結
以上是生活随笔為你收集整理的【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【解题报告】Leecode 423. 从
- 下一篇: 【解题报告】Leecode 700. 二