编程题及解题思路(1,String)

题目描述

请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。

给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。

测试样例:
"aeiou"
返回:True
"BarackObama"
返回:False
import java.util.*;

public class Different {
    public boolean checkDifferent(String iniString) {
        // write code here
      for (int l = 0; l < iniString.length(); l++) {
            for (int i = iniString.length()-1; i > l; i--) {
                // System.out.print(iniString.charAt(0));
                // System.out.print(iniString.charAt(i));
                if (iniString.charAt(l) == iniString.charAt(i)) {
                    return false;
                }
            }
        }
        return true;
    }
}

个人解题思路

题意是字符串中只要有重复的就返回false,重复就意味着有比较,

这里采用双重for循环,定义两个点一个从前往后一个从后往前,将所有的都比较一遍后将结果返回,若是有相等则直接返回false。

效率:(运行时间23ms 占用内存9680k)

public static boolean checkDifferent2(String iniString) {
        HashSet<Character> hashSet = new HashSet<Character>();
        char[] charArray = iniString.toCharArray();
        for(char ch:charArray) {
            hashSet.add(ch);
        }
        if(hashSet.size()==charArray.length) {
            return true;
        }
        return false;
    }

通过set集合实现,利用set的不重复性

将String中每一个char字符存入set集合中比较set集合与char集合的长度,相等就说明无重

效率:(运行时间:44ms 占用内存11348k)

暂时想到这两种解题思路,如果有效率更高的欢迎交流,注:效率由牛客网提供的,多测了几次不是特别准确,时间复杂度空间复杂度菜鸟猪还没弄明白。

猜你喜欢

转载自www.cnblogs.com/youknow-zx/p/11418766.html
今日推荐