当前位置:网站首页>每日刷题记录 (十二)
每日刷题记录 (十二)
2022-07-04 03:55:00 【独一无二的哈密瓜】
文章目录
第一题: 剑指 Offer II 012. 左右两边子数组的和相等
LeetCode: 剑指 Offer II 012. 左右两边子数组的和相等
描述:
给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。

解题思路:
- 这里直接记录所有的总和, 给
rightTotal- 遍历数组.
- 让leftTotal记录左侧的所有元素的和,
rightTotal记录右侧所有元素的和.- 如果当前
leftTotal和rightTotal值相等. 返回当前下标.
代码实现:
class Solution {
public int pivotIndex(int[] nums) {
int rightTotal = 0;
int leftTotal = 0;
for(int num : nums) {
rightTotal += num;
}
for(int i = 0; i < nums.length; i++) {
// 注意这里先右边减了 再判断了 然后左边加.
rightTotal -= nums[i];
if (leftTotal == rightTotal) return i;
leftTotal += nums[i];
}
return -1;
}
}
第二题: 剑指 Offer II 014. 字符串中的变位词
LeetCode: 剑指 Offer II 014. 字符串中的变位词
描述:
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
解题思路:
- 使用滑动窗口来解决.
- 首先使用一个数组记录s1中 字符串出现的次数
- 然后将所有的没出现的字符变成-1
- 建立一个范围为 [left,right] 的滑动窗口.
- 如果当前right下标的元素在数组中存在
- 如果当前次数大于0, 则让该元素对应的数组下标减1, 窗口变大一个(right++).
- 如果当前次数等于0, 如果当前left和right下标元素不相同, 就需要左边窗口变小(left++). 如果相同了, 就让窗口往右滑动一个(left++,right++)
- 如果当前right下标的元素在数组中不存在.如果当前left和right不在同以下标,则表示当前已经进行窗口变化,且当前元素又不存在,就需要重新初始化窗口,
代码实现:
class Solution {
public boolean checkInclusion(String s1, String s2) {
int[] arr = new int[26];
for(char ch : s1.toCharArray()) {
arr[ch-'a']++;
}
for (int i = 0; i < 26; i++) {
if (arr[i] == 0) arr[i] = -1;
}
int left = 0;
int right = 0;
int total = s1.length();
while (total > 0 && right < s2.length()) {
int tmp = arr[s2.charAt(right)-'a'];
if (tmp == -1) {
while (left < right) {
arr[s2.charAt(left) - 'a']++;
total++;
left++;
}
left = right + 1;
right = left;
} else {
if (tmp > 0) {
total--;
arr[s2.charAt(right)-'a']--;
right++;
}else {
while(s2.charAt(left) != s2.charAt(right)) {
total++;
arr[s2.charAt(left) - 'a']++;
left++;
}
left++;
right++;
}
}
}
return total == 0;
}
}
第三题: 剑指 Offer II 016. 不含重复字符的最长子字符串
LeetCode: 剑指 Offer II 016. 不含重复字符的最长子字符串
描述:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。


解题思路:
- 这里是使用滑动窗口解题.
- 范围为 [left,right]的滑动窗口. 将字符串加入list记录
- 如果当前right下标的元素存在, 就删除list中首元素, 让left++, 直到right下标元素在list中不存在.
- 将right下标的元素加入list中, 记录下当前滑动窗口的大小(right-left+1)
- 遍历结束,返回最大的滑动窗口大小.
代码实现:
class Solution {
public int lengthOfLongestSubstring(String s) {
int left = 0;
int right = 0;
int ans = 0;
List<Character> list = new ArrayList<>();
while (right < s.length()) {
while(left < right && list.contains(s.charAt(right))) {
list.remove(0);
left++;
}
list.add(s.charAt(right));
ans = Math.max(ans,right-left+1);
right++;
}
return ans;
}
}
第四题: 剑指 Offer II 018. 有效的回文
LeetCode: 剑指 Offer II 018. 有效的回文
描述:
给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
本题中,将空字符串定义为有效的 回文串 。
解题思路:
- 遍历字符串, 只要字符串是数字和字符就把他变成一个新的字符串.
- 使用双指针遍历字符串.
- 如果
left下标和right下标的字的内容一样, 就left++. right--;- 如果不一样,直接返回
false;- 遍历结束返回
true;
代码实现:
class Solution {
public boolean isPalindrome(String s) {
String ret = "1234567890abcdefghijklmnopqlstuvwxyz";
StringBuilder sb = new StringBuilder();
s = s.toLowerCase();
for (int i = 0; i < s.length(); i++) {
if(ret.contains(s.charAt(i)+"")){
sb.append(s.charAt(i));
}
}
int left = 0;
int right = sb.length()-1;
while(left <= right) {
if(sb.charAt(left) == sb.charAt(right)) {
left++;
right--;
}else{
return false;
}
}
return true;
}
}
第五题: 剑指 Offer II 019. 最多删除一个字符得到回文
LeetCode: 剑指 Offer II 019. 最多删除一个字符得到回文
描述:
给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
解题思路:
- 这里首先进行判断, 当前是否是回文字符串
- 如果是就返回true;
- 如果不是就去判断当前[left,right-1] 或 [left+1,right]是否是回文字符串.只要有一个是就是true;
代码实现:
class Solution {
public boolean validPalindrome(String s) {
int left = 0;
int right = s.length()-1;
while(left <= right) {
if(s.charAt(left) == s.charAt(right)){
left++;
right--;
}else{
return isHui(s,left,right-1) || isHui(s,left+1,right);
}
}
return true;
}
public boolean isHui(String s, int left, int right) {
while(left <= right) {
if(s.charAt(left) == s.charAt(right)) {
left++;
right--;
}else{
return false;
}
}
return true;
}
}
第六题: 剑指 Offer II 020. 回文子字符串的个数
LeetCode: 剑指 Offer II 020. 回文子字符串的个数
描述:
给定一个字符串 s ,请计算这个字符串中有多少个回文子字符串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

解题思路:
- 这里使用动态规划解题.
- 状态 F(i,j) : 表示 i~j是否是回文串
- 状态转移方程: 当前
j == i 时, F(i,j) = true; 当j - i == 1时,F(i,j)=s.charAt(i) == s.charAt(j);当j-i > 1时, F(i,j) = s.charAt(i) == s.charAt(j) && dp[i+1][j-1](dp[i+1][j-1] ,就是[i+1,j-1]是否是回文串)- 初始状态: 单个字符是 true;
- 返回结果:
dp[i][j] 为true的个数
代码实现:
class Solution {
public int countSubstrings(String s) {
boolean[][] dp = new boolean[s.length()][s.length()];
int count = 0;
for(int i = s.length()-1; i >= 0; i--) {
for(int j = s.length()-1; j>=i; j--){
if(j == i) dp[i][j] = true;
else if(j - i == 1) {
dp[i][j] = s.charAt(i) == s.charAt(j);
}else{
dp[i][j] = s.charAt(i) == s.charAt(j) && dp[i+1][j-1];
}
if(dp[i][j]) count++;
}
}
return count;
}
}
边栏推荐
- Acwing game 58
- 6-4 vulnerability exploitation SSH banner information acquisition
- [go] database framework Gorm
- 技术管理 - 学习/实践
- Wechat brain competition answer applet_ Support the flow main belt with the latest question bank file
- 多位科技公司创始人向Entrepreneur First提供高达1.58亿美元的C轮融资,协助其投资下一代全球创新者
- 旭化成首次参展第五届中国国际进口博览会(5th CIIE)
- "Don't care too much about salary when looking for a job", this is the biggest lie I've ever heard
- 【安全攻防】序列化与反序列,你了解多少?
- RAC delete damaged disk group
猜你喜欢

How do good test / development programmers practice? Where to go

Balloon punching and Boolean operation problems (extremely difficult)

Niuke Xiaobai monthly race 49

浅谈JVM的那些事

Boutique website navigation theme whole station source code WordPress template adaptive mobile terminal

Change the background color of Kivy tutorial (tutorial includes source code)

Senior developers tell you, how to write excellent code?

GUI 应用:socket 网络聊天室

关闭的数据能用dbca删除吗? 能

Formatted text of Kivy tutorial (tutorial includes source code)
随机推荐
LeetCode136+128+152+148
[cloud native] those lines of code that look awesome but have a very simple principle
Apple CMS imitation watermelon video atmospheric response video template source code
Imitation of "game bird" source code, mobile game issue evaluation, open service, open test collection, game download website template
Operate the server remotely more gracefully: the practice of paramiko Library
更优雅地远程操作服务器:Paramiko库的实践
GUI 应用:socket 网络聊天室
RPC - grpc simple demo - learn / practice
Keysight n9320b RF spectrum analyzer solves tire pressure monitoring scheme
[security attack and Defense] how much do you know about serialization and deserialization?
Modstartblog modern personal blog system v5.2.0 source code download
分享一些我的远程办公经验
1. Mx6u-alpha development board (LED drive experiment in C language version)
Change the background color of Kivy tutorial (tutorial includes source code)
Main applications of TDK lambda power supply
C language one-way linked list exercise
Correct the classpath of your application so that it contains a single, compatible version of com. go
Beipiao programmer, 20K monthly salary, 15W a year, normal?
YoloV6实战:手把手教你使用Yolov6进行物体检测(附数据集)
附件2-2保密承诺书.docx