给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 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循环不会对数组的元素造成影响
|