剑指Offer之Java算法习题精讲链表与字符串及数组
作者:明天一定. 发布时间:2022-10-03 19:10:17
标签:Java,链表,数组,字符串
题目一
链表题——操作链表
根据给定的链表按照指定条件删除其中节点并返回新的头节点
具体题目如下
解法
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode q = new ListNode(-1);
ListNode a = q;
q.next = head;
while(q.next!=null){
if(q.next.val==val){
q.next = q.next.next;
}else{
q = q.next;
}
}
return a.next;
}
}
题目二
字符串题——判断同构字符串
根据给定的字符串判断他们是否为同构字符串
具体题目如下
解法
class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length()!=t.length()){
return false;
}
for(int i =0;i<s.length();i++){
if(s.indexOf(s.charAt(i))!=t.indexOf(t.charAt(i))){
return false;
}
}
return true;
}
}
题目三
链表题——操作链表
编写函数来删除某个单链表中指定的节点
具体题目如下
解法
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
题目四
字符串题——判断异位词
编写函数来判断给定的两个字符串是否为字母异位词
具体题目如下
解法
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) return false;
ArrayList<Character> list1 = new ArrayList<>();
ArrayList<Character> list2 = new ArrayList<>();
for (int i = 0; i < s.length(); i++) {
list1.add(s.charAt(i));
}
for (int i = 0; i < t.length(); i++) {
list2.add(t.charAt(i));
}
Collections.sort(list1);
Collections.sort(list2);
for (int i = 0; i < list1.size(); i++) {
if (list1.get(i)!=list2.get(i)) return false;
}
return true;
}
}
//要熟悉API
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] str1 = s.toCharArray();
char[] str2 = t.toCharArray();
Arrays.sort(str1);
Arrays.sort(str2);
return Arrays.equals(str1, str2);
}
}
题目五
数组题——查找数组
根据给定的数组按照指定条件查找数组中是否包含指定值
具体题目如下
解法
class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
if(i!=nums[i]){
return i;
}
}
return nums.length;
}
}
题目六
字符串题——验证字符串
验证给定的字符串是否遵循相同的规律
具体题目如下
解法
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] split = s.split(" ");
if(split.length!=pattern.length()) return false;
int q = 0;
for(int i =0;i<split.length;i++){
l: for(int w = 0;w<split.length;w++){
if(split[w].equals(split[i])){
q = w;
break l;
}
}
if(pattern.indexOf(pattern.charAt(i))!=q){
return false;
}
}
return true;
}
}
来源:https://blog.csdn.net/wai_58934/article/details/123153850


猜你喜欢
- 加载图片openCv有一个名imread的简单函数,用于从文件中读取图像imread 函数位于Imgcodecs类的同名包中。加载图片代码i
- 简介目的:Optional的出现主要是为了解决null指针问题,也叫NPE(NullPointerException)外形:Optional
- renameTo方法public boolean renameTo(File dest),File类中的renameTo方法可以操作文件或目
- xamarin 可以很方便的编写一个电话拨号程序,下面的代码是调用android系统的拨号功能,拨号前会给出一个提示信息。callButto
- c#下压缩解压,主要是用第三方类库进行封装的。ICSharpCode.SharpZipLib.dll类库,链接地址为你官方下载链接。压缩主要
- Java类中字段可以不赋予初始值的原因Java虚拟机会对类的实例对象进行分配内存,在分配内存后,会将内存空间(除了对象头)全部初始化为零值。
- 对已有的apk文件进行重新打包,前面 Android签名机制:生成keystore、签名、查看签名信息 已经介绍了。本文介绍另外两种需求。使
- 1. 你知道volatile是如何保证可见性吗?我们先看一组代码:public class VolatileVisibleDemo { &n
- 喜欢另辟蹊径的我,在这里废话不多说了,直接上代码和图片了。效果图如下:第一步:MainActivity的代码如下:package net.l
- 本文实例为大家分享了C#基于winform实现音乐播放器的具体代码,供大家参考,具体内容如下首先,右键工具箱的组件,找到选择项,找到Wind
- 一、需求背景有时候,我们需要在屏幕上显示新的信息,同时移除旧的信息,一般情况下我们通过VISIBILITY或者GONE来对需要显示或者隐藏的
- public class ReflexTest { public static void main(St
- 本文实例讲述了WinForm判断关闭事件来源于用户点击右上角“关闭”按钮的方法。分享给大家供大家参考。具体如下:protected over
- 一、概述近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下效果图:恩,接下来正题。首先只有大于等于4.4版本支持这个半透明状态栏的效果,
- 多选择结构switch语句 在java中为多路分支选择流程专门提供了switch语句,switch语句根据一个表达式的值,选择运行多个操作中
- Mybatis无法获取带有下划线前缀的字段的值今天下面,把几张表里的字段都加了前缀,如 article_id,article_title,a
- 最近在改写WebApp时要将以前用泛型处理例程写的Captcha 改成使用WebApi 来实作机制,在实作的过程中发现使用IRequires
- 关于为什么需要创建单例?这里不过多介绍,具体百度知。 关于C# 创建单例步骤或条件吧1、声明静态变量;2、私有构造函
- 在了解ViewPager的工作原理之前,先回顾ListView的工作原理:ListView只有在需要显示某些列表项时,它才会去申请可用的视图
- 我们知道,值类型的变量是在堆栈上分配内存的,而引用类型包括System.Object的对象是在堆上分配内存的,基于这一特点,当值类型被类型转