大家都习惯了使用IDE自动补全了,有些语法也就模模糊糊。例如length&length(),你是否仍然感觉他它俩一样吗?
请你把我给的这两个算法题打出来:
给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i]== nums[j] 且 i
返回好数对的数目。
示例1:
输入:nums= [1,2,3,1,1,3]
输出:4解释:有4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0开始
示例2:
输入:nums= [1,1,1,1]
输出:6解释:数组中的每组数字都是好数对
示例3:
输入:nums= [1,2,3]
输出:0提示:1 <= nums.length <= 100
1 <= nums[i] <= 100来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-good-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
View Code
classSolution {public int numIdenticalPairs(int[] nums) {int res=0;for(int i = 0; i < nums.length; i++){for(int j = i + 1; j < nums.length; j++){if(nums[i] ==nums[j])++res;
}
}returnres;
}
}
View Code
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例1:
输入: s1= "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出:true示例2:
输入: s1= "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出:false来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/interleaving-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
View Code
classSolution {public booleanisInterleave(String s1, String s2, String s3) {int n = s1.length(), m = s2.length(), t =s3.length();if (n + m !=t) {return false;
}boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;for (int i = 0; i <= n; ++i) {for (int j = 0; j <= m; ++j) {int p = i + j - 1;if (i > 0) {
f[i][j]= f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) ==s3.charAt(p));
}if (j > 0) {
f[i][j]= f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) ==s3.charAt(p));
}
}
}returnf[n][m];
}
}
View Code
是否感觉到在LeetCode编程,不知道应该选哪一个length&length()?
那我们来一个简单的又易于理解的:
int[] arr = new int[5];
System.out.println(arr.length);//length for array
String str= "wuroc";
System.out.println(str.length());//length() for string
可以简单的看出,数组使用length。String类型使用length();
由此可以引出为什么String类没有length,数组没有length()?
数组的定义:数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。---《Thinking In Java》
首先,数组是一个容器对象,其中包含固定数量的单一类型的值。创建数组后,其长度永不更改[1]。数组的长度可用作最终实例变量的长度。因此,长度可以视为数组的定义属性。
数组可以通过两种方法创建:
1)数组创建表达式
int[] a;
2)数组初始化程序。创建后,将指定大小。
int[] a = new int[rand.nextInt(20)];
上面的示例中使用了一个数组创建表达式。它指定元素类型,嵌套数组的级别数以及至少一个嵌套级别的数组长度。
该声明也是合法的,因为它指定了嵌套级别之一。
int[][] arr = new int[3][]
数组初始化器创建一个数组,并为其所有组件提供初始值。它以逗号分隔的表达式列表形式编写,并用大括号{}括起来。
int[] a = {w,u,r,o,c}
Q2.为什么没有定义类似于“字符串”的类“数组”?
Object obj = new int[10];
数组包含从Object类(克隆除外)继承的所有成员。为什么没有数组的类定义?
我们找不到Array.java文件。粗略的解释是它们对我们隐藏了。但String有类。
您可以考虑这个问题-如果有一个Array类,它将是什么样?它仍然需要一个数组来保存数组数据,对吗?
因此,定义这样的类不是一个好主意。
实际上,我们可以使用以下代码获取数组的类:
int[] a = new int[3];
System.out.println(arr.getClass());
class [I
Output
class[I]代表类对象“组件类型为int的数组”的运行时类型签名。
Q3.为什么String具有length()方法?
字符串的备份数据结构是一个char数组。无需定义并非每个应用程序都必需的字段。
与C不同,字符数组不是Java中的字符串。
String类有很多方法,方法都要带有()。所以我们的所有类的调用方法时,就需要用 .length();
当我们定义时,就可以创建一个String引用:
String s = “wuroc”;
也可以直接使用”new“:
String s = new String("WuRoc");
并且在API1.8中:length()方法的含义是: