资讯专栏INFORMATION COLUMN

leetcode每日一题-859:亲密字符串

张迁 / 2828人阅读

摘要:每日一题亲密字符串链接亲密字符串题目分析题目本身不是很难,但是有不少需要注意的地方,逐一来进行分析。首先如果两个字符串不一样长,那么肯定是。

leetcode每日一题-859:亲密字符串

链接

亲密字符串


题目



分析

题目本身不是很难,但是有不少需要注意的地方,逐一来进行分析。首先如果两个字符串不一样长,那么肯定是false。然后考虑长度相等的情况,如果s和goal刚开始就一样答案是什么呢?如果是类似于abab这种类型的,那么也是false,因为这种交换之后一定就不相等了;如果是aaaa这种,在一些对应位置有相同的元素,那么交换后是true。在来考虑值不相等的情况,首先从前往后遍历找到第一个不一样的位置下标,然后从后往前遍历找到最后一个不一样的。假设两个字符串只有一个位置不一样,那么答案一定是false,如果两个位置不一样的话,交换这两个位置的字符,然后根据交换的s和goal值进行判断即可。



代码

C++

class Solution {public:    unordered_map m;    bool buddyStrings(string s, string goal) {        if(s.size() != goal.size()) return false;        int idx1 = -1, idx2 = -1;        for(int i=0 ; i=0 ; i--)        {            if(s[i] != goal[i])            {                idx2 = i;                break;            }        }        if(idx1 != idx2 and idx1 != -1 and idx2 != -1)        {            swap(s[idx1], s[idx2]);            return s == goal;        }         if(idx1 == idx2 and idx2 != -1) return false;        for(auto ve : m)        {            if(ve.second > 1) return true;        }        return false;    }};

Java

class Solution {    public boolean buddyStrings(String s, String goal) {        if (s.length() != goal.length()) {            return false;        }                if (s.equals(goal)) {            int[] count = new int[26];            for (int i = 0; i < s.length(); i++) {                count[s.charAt(i) - "a"]++;                if (count[s.charAt(i) - "a"] > 1) {                    return true;                }            }            return false;        } else {            int first = -1, second = -1;            for (int i = 0; i < goal.length(); i++) {                if (s.charAt(i) != goal.charAt(i)) {                    if (first == -1)                        first = i;                    else if (second == -1)                        second = i;                    else                        return false;                }            }            return (second != -1 && s.charAt(first) == goal.charAt(second) &&                    s.charAt(second) == goal.charAt(first));        }    }}作者:LeetCode-Solution

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124770.html

相关文章

  • LeetCode 859 亲密符串[模拟] HERODING的LeetCode之路

    摘要:解题思路一道并不简单的模拟题,需要考虑的情况总结下来有三种长度不同返回完全相同且有重复字符返回字符串有不相等的两个地方需要查看它们交换后是否相等即可。 解题思路:...

    aisuhua 评论0 收藏0
  • leetcode每日一题-423:从英文中重建数字

    摘要:每日一题从英文中重建数字链接从英文中重建数字题目分析首先我们先分析每个字母的组成,然后发现一些字符只在一个单词中出现,我们先去统计一下这些单词个数。统计完次数,按升序排列即可。 ...

    kyanag 评论0 收藏0
  • leetcode每日一题-520:检测大写字母

    摘要:每日一题检测大写字母链接检测大写字母题目分析模拟分析题遍历一下字符串统计一下其中的大小写字母然后根据大小写字母的数量判断即可代码统计大写小写字母的数量这里使用是为了避免其他字符的干扰如果字符串都是大写小写字母 ...

    flybywind 评论0 收藏0
  • LeetCode每日一题: 同构符串(No.205)

    摘要:题目同构字符串给定两个字符串和,判断它们是否是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。若找到为的则与比较,不相等则不为同构,相等就继续向下。循环结束后没有中途即为同构字符串返回。 题目: 同构字符串 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留...

    Carbs 评论0 收藏0
  • leetcode每日一题-559:N叉树的最大深度

    摘要:每日一题叉树的最大深度链接叉树的最大深度题目分析简单的搜索题目。只需要从根节点开始一下整个叉树就可以得到答案了。主要是对要理解和掌握叉树的遍历。代码作者作者 lee...

    caiyongji 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<