2021-10-27
题目
1.左转字符串||
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
2.数组形式的整数加法
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
示例 1:
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
示例 2:
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:
输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000
提示:
1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
如果 A.length > 1,那么 A[0] != 0
3.反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示:
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
4.有效字母的异位
5.验证回文串
题解
1.左转字符串||
我们可以直到字符串其实也是一种数组的形式,我们呢可以用字符串的直接切片来写这个题,所以我对昨天的代码进行了一个简单的优化,昨天好像是超越20多,今天是超越了80,内存也提高了很多!!!
接下来我们可以直接看代码!!!
2.数组形式的整数加法
本题最简单最方便的方法就是直接把数组里面的数给转化为整数,然后在相加k,再把相加后的结果给放到数组中,这样就直接返回接过来,但是这个效率是十分低的。
第二种方法就是使用模拟法,我们先把k转化为数组然后对位相加,相加后
这个也是字符串相乘的一个基础解题法!!!
3.反转字符串 II
本题在python中我觉得有一个很方便的一个办法,就是range中的第三个参数,每次循环多少个步长,本题可知每次走2k个步长就可以直接使用这个range的步长参数,走2k让前k个数反转。
4.有效字母的异位
这题我有点投机取巧,用了python中的count这个函数,我建议大家还是很少用就少用,自己去写一个计数方法。
5.验证回文串
这个就是一个简单的双指针,我就不多解释了,直接上代码!!
代码
1.左转字符串||
class Solution: def reverseLeftWords(self, s: str, n: int) -> str: string = s[n:]+s[:n] return string #本代码在python实现是非常简单的
2.数组形式的整数加法
class Solution: def addToArrayForm(self, num: List[int], k: int) -> List[int]: res = 0 for i in range(len(num)): res = res+(10**i)*num[len(num)-i-1] return [int(i) for i in str(res+k)]
3.反转字符串 II
class Solution: def reverseStr(self, s: str, k: int) -> str: ss = [i for i in s] n=len(s) for i in range(0,n,2*k): ss[i:i+k]=ss[i:i+k][::-1] return "".join(ss)
4.有效字母的异位
class Solution(object): def isAnagram(self, s, t): """ :type s: str :type t: str :rtype: bool """ dic1={c:s.count(c) for c in set(s)} dic2={d:t.count(d) for d in set(t)} if dic1==dic2: return True else:return False
5.验证回文串
class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ if 1<=len(s) <=2*10**5: c = '' for i in s: if i.isalpha(): c += i.lower() elif i.isalnum(): c += i n = len(c)//2 for i in range(n): if c[i] != c[len(c)-i-1]: return False else: return True