IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2021.7.21 -> 正文阅读

[数据结构与算法]2021.7.21

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例 2:

输入: "race a car"
输出: false
解释:"raceacar" 不是回文串

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。

自己的一些思路可惜不太有些小错误,不想改了。

class Solution {
    public boolean isPalindrome(String s) {
        if(s==null)
        return true;
        s=s.trim();//去除前后空格
        s=s.toLowerCase();//全转为小写
        String a=new String();//创建新的字符串保存合法部分
        for(int m=0;m<s.length();m++){
            if(s.charAt(m)>'a'&&s.charAt(m)<'z'||(s.charAt(m)>'0'&&s.charAt(m)<'9')) {//判断是否是a-z或0-9
                 char c=s.charAt(m);   //取字符,返回值是char
                String z=Character.toString(c);//将返回值char转为string
               a=a+z;//连接字符串
            }
        }
        int left=0;
        int right=a.length()-1;
        while(left<right){
            if(a.charAt(left)!=a.charAt(right)){//比较是否回文
                      return false;
            }
            else
            {
                 left++;
                right--;

            }
           
        
        }
       
 return true;
    }
}

商业转载请联系官方授权,非商业转载请注明出处。

题解:用到了?isLetterOrDigit这个函数,后面思路大致相同

class Solution {
    public boolean isPalindrome(String s) {
        int n = s.length();
        int left = 0, right = n - 1;
        while (left < right) {
            while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
                ++left;
            }
            while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
                --right;
            }
            if (left < right) {
                if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
                    return false;
                }
                ++left;
                --right;
            }
        }
        return true;
    }
}

?


刷题是一个痛苦的过程 ,特别是对基础不好的人,感觉什么地方都要补,代码基础不过关,数据结构理解不过关,算法不过关,当然在刷题的过程中,查漏补缺的过程也是提升的过程?。

Collection集合框架的学习

数组在存储多个数据方面的特点:

—旦初始化以后,其长度就确定了。

数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。比如: String[] arr;int[] arr1;object[] arr2;

数组在存储多个数据方面的缺点:

—旦初始化以后,其长度就不可修改。

数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便

获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用

数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。

二、集合框架

coLLection接口:单列集合,用来存储一个一个的对

List接口:存储有序的、可重复的数据。-->“动态”数组

ArrayList、 LinkedList、 Vector

Set接:存储无序的、不可重复的数据-->高中讲的集合”

HashSet、 LinkedHashset、 TreeSet

Map接口:双列集合,用来存储一对(key - vaLue)一对的数据

HashMap、LinkedHashMap、TreeMap、Hashtable、Properties

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

public class CollectionTest {
    public static void main(String[]args){
        Collection coll=new ArrayList();
        ((ArrayList) coll).add(123);
        ((ArrayList) coll).add(456);
        ((ArrayList) coll).add(new String("tom"));
        ((ArrayList) coll).add(false);
       // ((ArrayList) coll).add(new person("kit",20));
        person p=new person("keiw",20);//此时比较的是是否包含p

        ((ArrayList) coll).add(p);
        //contains(Object obj)判断当前集合中是否包含obj
        //我们在判断是会调用obj对象类的equals()
        boolean contains=coll.contains(123);
        System.out.println(contains);
        //判断的是内容
        System.out.println(coll.contains(new String("tom")));
        //System.out.println(coll.contains(p));
        System.out.println(coll.contains(new person("keiw",20)));
        //因为没有重写,所以调用equals调动object的equals函数,所以要想让结果为true需要重写

      //在做remove操作时,也需要进行equal比较,同样对于对象也需要重写才能进行移除操作
        //集合其实和数组有相似的区别都是为了存储数据,但是几个可以存储不同类型的数据,另外也有相应的方法进行操作
        //removeall和retainall(获取当前集合交集)
        Collection coll1= Arrays.asList(123,456);

        coll.removeAll(coll1);
        System.out.println(coll);
      //  coll.removeAll(coll1);

    }
}

关于collection的一些方法

从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

?

Collection 接口

Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。

Collection 接口存储一组不唯一,无序的对象。

collection中可以通过toArray实现集合到数组的转换

例如

Collection coll=new ArrayList();?

??? coll.add(123);

coll.add(456);

coll.add(new Person("tom",20));//可以让一个类的对象放入集合

coll.add(new String("tom"));

coll.add(false);

Object []arr=coll.toArray();

For(itn i=0;i<arr.length;i++){

System.out.println(arr[i]);

}



同样将数组转变为集合

List<String> list=Array.asList(new String[]{"aa","bb","cc"});

System.out.println(list);

这是list是一个集合

看下图

第一种写法输出不是我们期望的情况,他把括号里面的当成了一个元素

第二种写法正确

?

?

遍历元素时可以通过迭代器的hasNext方法,

两种错误的输出方式

?

?

?方式二,通过这种for循环不会对数组的元素造成影响

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:26:57  更:2021-07-22 14:29:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 12:33:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码