【力扣 389】找不同 C++题解(字符串+排序)

给定两个字符串 s 和 t ,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

输入:s = "abcd", t = "abcde"

输出:"e"

解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y"

输出:"y"

提示:

0 <= s.length <= 1000

t.length == s.length + 1

s 和 t 只包含小写字母


思路

首先对st进行排序。这样,如果st是相同的(除了t多一个字符),那么排序后的st应该是几乎相同的,只是t在某个地方多了一个字符。

然后,函数定义了两个迭代器it1it2,分别指向st的开始。接着,有一个循环,只要it1没有到达s的末尾,就比较it1it2指向的字符。如果这两个字符不同,那么it2指向的字符就是t相对于s多出的那个字符,因此函数返回*it2

如果循环结束时还没有找到不同的字符,那么t相对于s多出的字符一定是t的最后一个字符。因此,函数返回t的最后一个字符,即*t.rbegin()


AC代码

cpp 复制代码
/*
 * @lc app=leetcode.cn id=389 lang=cpp
 *
 * [389] 找不同
 */

// @lc code=start
class Solution {
   public:
	char findTheDifference(string s, string t) {
		sort(s.begin(), s.end());
		sort(t.begin(), t.end());
		auto it1 = s.begin();
		auto it2 = t.begin();
		for (; it1 != s.end(); it1++, it2++) {
			if (*it1 != *it2) {
				return *it2;
			}
		}
		return *t.rbegin();
	}
};
// @lc code=end
相关推荐
王老师青少年编程39 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮1 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
许彰午2 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
leoufung3 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了3 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
Bat U3 小时前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰3 小时前
C++ 排列组合完整指南
开发语言·c++·算法
橙子也要努力变强4 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++
盐焗鹌鹑蛋4 小时前
【C++】stack和queue类
c++
郝学胜-神的一滴5 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal