zoukankan      html  css  js  c++  java
  • [leetcode] Buddy Strings

    Given two strings A and B of lowercase letters, return true if and only if we can swap two letters in A so that the result equals B.

    Example 1:

    Input: A = "ab", B = "ba"
    Output: true
    

    Example 2:

    Input: A = "ab", B = "ab"
    Output: false
    

    Example 3:

    Input: A = "aa", B = "aa"
    Output: true
    

    Example 4:

    Input: A = "aaaaaaabc", B = "aaaaaaacb"
    Output: true
    

    Example 5:

    Input: A = "", B = "aa"
    Output: false

    分析:题目给两个字符串,要求判断这两个字符串是否有且仅有两个字符颠倒了顺序。根据题目的意思,不难想到直接用字面上的方法就可以解决了。首先排除一下两个字符串长度不等这种特殊的情况。然后记录每个不相等的位置。最后有两个位置不同时,判断一下;当没有位置不同(两个字符串相等)时,判断一下是否有重复出现的字符,有的话就是true,这里用一个set记录出现的字符,比较set和A的长度,也是一个小技巧了。代码如下:

     1 public boolean buddyStrings(String A, String B) {
     2         if ( A.length() != B.length() ) return false;
     3         int cur = 0;
     4         List<Integer> list = new ArrayList<>();
     5         while ( cur < A.length() ){
     6             char c_A = A.charAt(cur);
     7             char c_B = B.charAt(cur);
     8             if ( c_A != c_B ) list.add(cur);
     9             cur ++;
    10         }
    11         if ( list.size() == 2 ) {
    12             return A.charAt(list.get(0)) == B.charAt(list.get(1)) && A.charAt(list.get(1)) == B.charAt(list.get(0));
    13         }
    14         if ( list.size() == 0 ) {
    15            Set<Character> set = new HashSet<>();
    16            for ( char c : A.toCharArray() ) set.add(c);
    17            return set.size() != A.length();
    18         }
    19         return false;
    20     }

    代码还有可以优化的地方,现在跑的结果时5ms。可以合并一些操作,估计优化后理想的结果应该是3、4ms吧。

    这个题目没有什么太大的算法思想,考虑周全就好了。

  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/boris1221/p/9284641.html
Copyright © 2011-2022 走看看