<p>Given two strings <code>s</code> and <code>goal</code>, return <code>true</code><em> if you can swap two letters in </em><code>s</code><em> so the result is equal to </em><code>goal</code><em>, otherwise, return </em><code>false</code><em>.</em></p>

<p>Swapping letters is defined as taking two indices <code>i</code> and <code>j</code> (0-indexed) such that <code>i != j</code> and swapping the characters at <code>s[i]</code> and <code>s[j]</code>.</p>

<ul>
	<li>For example, swapping at indices <code>0</code> and <code>2</code> in <code>&quot;abcd&quot;</code> results in <code>&quot;cbad&quot;</code>.</li>
</ul>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;ab&quot;, goal = &quot;ba&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> You can swap s[0] = &#39;a&#39; and s[1] = &#39;b&#39; to get &quot;ba&quot;, which is equal to goal.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;ab&quot;, goal = &quot;ab&quot;
<strong>Output:</strong> false
<strong>Explanation:</strong> The only letters you can swap are s[0] = &#39;a&#39; and s[1] = &#39;b&#39;, which results in &quot;ba&quot; != goal.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;aa&quot;, goal = &quot;aa&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> You can swap s[0] = &#39;a&#39; and s[1] = &#39;a&#39; to get &quot;aa&quot;, which is equal to goal.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length, goal.length &lt;= 2 * 10<sup>4</sup></code></li>
	<li><code>s</code> and <code>goal</code> consist of lowercase letters.</li>
</ul>

 class Solution {

     void getDifferentLetterIndexes(vector<int>&differentLetterIndexes, string s, string goal)
     {
         for (int i = 0; i < s.length(); i++)
         {
             if (s[i] != goal[i])
                 differentLetterIndexes.push_back(i);
         }
     }
   
     bool isSswapEqualGoal(vector<int>differentLetterIndexes, string s, string goal)//acb bca
     {
         int firstIndex = differentLetterIndexes[0];
         int secondIndex = differentLetterIndexes[1];
         char temp = s[firstIndex];
         s[firstIndex] = s[secondIndex];
         s[secondIndex] = temp;
         return s == goal;
     }

     bool isAllLettersSame(string s, string goal)
     {
         for (int i = 0; i < s.length(); i++)
         {
             for (int j = i + 1; j < s.length(); j++)
             {
                 if (s[i] == goal[j])
                     return true;
             }
         }
         return false;
     }

 public:
     bool buddyStrings(string s, string goal) 
     {
         if (s.length() != goal.length())
             return false;

         vector<int>differentLetterIndexes;
         getDifferentLetterIndexes(differentLetterIndexes, s, goal);
         if (differentLetterIndexes.size() > 2)
             return false;
         if (differentLetterIndexes.size() == 2)
             return  isSswapEqualGoal(differentLetterIndexes, s, goal);

         if (differentLetterIndexes.size() == 0)
             return isAllLettersSame(s, goal);

         return false;
     }
 };

8700