前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Leetcode -521.最长特殊序列 -541.反转字符串Ⅱ】

【Leetcode -521.最长特殊序列 -541.反转字符串Ⅱ】

作者头像
YoungMLet
发布2024-03-01 09:53:49
1120
发布2024-03-01 09:53:49
举报
文章被收录于专栏:C++/Linux

Leetcode -521.最长特殊序列

题目:给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列的长度。如果不存在,则返回 - 1 。

「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。

字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

例如,“abc” 是 “aebdc” 的子序列,因为删除 “aebdc” 中的字符 e 和 d 可以得到 “abc” 。 “aebdc” 的子序列还包括 “aebdc” 、 “aeb” 和 “” (空字符串)。

示例 1: 输入 : a = “aba”, b = “cdc” 输出 : 3 解释 : 最长特殊序列可为 “aba” (或 “cdc”),两者均为自身的子序列且不是对方的子序列。

示例 2: 输入:a = “aaa”, b = “bbb” 输出:3 解释 : 最长特殊序列是 “aaa” 和 “bbb” 。

示例 3: 输入:a = “aaa”, b = “aaa” 输出: - 1 解释 : 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样,字符串 b 的每个子序列也是字符串 a 的子序列。

思路是在两个字符串不相同的情况下,返回长度长的那个字符串的长度;相同就返回 -1;

代码语言:javascript
复制
		int findLUSlength(char* a, char* b)
		{
		    //由题意,在两个字符串不相同的情况下,返回长度长的那个字符串的长度
		    int lenA = strlen(a), lenB = strlen(b);
		    int max = lenA > lenB ? lenA : lenB;
		
		    //如果相同,返回-1
		    if (!strcmp(a, b))
		        return -1;
		
		    return max;
		}

Leetcode - 541.反转字符串Ⅱ

题目:给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1: 输入:s = “abcdefg”, k = 2 输出:“bacdfeg”

示例 2: 输入:s = “abcd”, k = 2 输出:“bacd”

思路是遍历字符串,每次走 2k 步,然后反转前 k 个字符,利用 i + k 找到第 k + 1 个,在反转前 k 个字符之前,判断 i + k 是否大于字符串的长度,比较它们的长度,取较小值;

代码语言:javascript
复制
		//交换字符
		void swap(char* a, char* b)
		{
		    char tmp = *a;
		    *a = *b;
		    *b = tmp;
		}
		
		//更新迭代字符
		//注意 right 传进来的时候是 i + k 或者字符串的长度,在交换字符之前需要先自减
		//假设传进来的是 i + k ,i + k - 1 才是前 k 个;
		void reverse(char* left, char* right)
		{
		    while (left < right)
		    {
		        swap(left++, --right);
		    }
		}
		
		//min函数取较小的值
		int min(int a, int b)
		{
		    return a < b ? a : b;
		}
		
		char* reverseStr(char* s, int k)
		{
		    /* 从头开始遍历,i每次走 2k 步,然后反转前k个;
		       在反转前 k 个字符之前,判断 i + k 是否大于字符串的长度,取它们的较小值;
		       注意要用传址的形式,因为需要改变到字符串中的字符 */
		    for (int i = 0; i < strlen(s); i += 2 * k)
		    {
		        reverse(&s[i], &s[min(i + k, strlen(s))]);
		    }
		    return s;
		}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode -521.最长特殊序列
  • Leetcode - 541.反转字符串Ⅱ
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档