实现一个算法确定字符串中的字符是否均唯一出现
样例
给出”abc”,返回 true
给出”aab”,返回 false
法一
两层for循环 遍历后面的字符串1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public class Solution {
/*
* @param str: A string
* @return: a boolean
*/
public boolean isUnique(String str) {
// write your code here
if(str == null){
throw new IllegalArgumentException("invalid parameters");
}
//如果str的长度是0或者1,那么没有重复字符,返回true
if(str.length() == 0 || str.length() == 1){
return true;
}
boolean flag=true;
for(int i=0;i<str.length()-1;i++)
{
for(int j=i+1;j<str.length();j++)
{
if(str.charAt(i)==str.charAt(j))
flag=false;
}
}
return flag;
}
}
法二
哈希表1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27public class Solution {
/*
* @param str: A string
* @return: a boolean
*/
public boolean isUnique(String str) {
// write your code here
if(str == null){
throw new IllegalArgumentException("invalid parameters");
}
//如果str的长度是0或者1,那么没有重复字符,返回true
if(str.length() == 0 || str.length() == 1){
return true;
}
HashSet<Character> hs=new HashSet<Character>();
for(int i=0;i<str.length();i++)
{
if(hs.contains(str.charAt(i)))
return false;
hs.add(str.charAt(i));
}
return true;
}
}
法三
将字符串转成字符数组,遍历数组,看当前字符是否和后面字符相同
1 | public class Solution { |
法四
调用string.idexof(value)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public class Solution {
/*
* @param str: A string
* @return: a boolean
*/
public boolean isUnique(String str) {
// write your code here
if(str == null){
throw new IllegalArgumentException("invalid parameters");
}
//如果str的长度是0或者1,那么没有重复字符,返回true
if(str.length() == 0 || str.length() == 1){
return true;
}
for(int i=0;i<str.length()-1;i++)
{
if(str.indexOf(str.charAt(i),i+1)!=-1)
//stringObject.indexOf(searchvalue,fromindex)
//如果要检索的字符串值没有出现,则该方法返回 -1。
return false;
}
return true;
}
}
补充:Java中字符串为什么不以\0结尾
Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。
Java中:
char []str=”test”;//编译都通不过
char []str=new char[10];//这样才行,也就是直接指定了其大小
在java中数组其实就是一个对象,学习java时,我们都接触的一句话就是everythingis object,因此数组也不例外,数组对象里还有一个属性叫做length,就是数组的长度,因此对于输出函数来说,有直接的大小可以判断字符串的边界,编译器就没必要再去浪费一个空间标识字符串的结束。