leetcode周末竞赛72,第一题解题思路

题目如下图所示:


2018-02-18 19:34:13屏幕截图.png

通过读题,发现需要将字符串中的字母转换成相反的大小写形式,数字形式不变。初读题意比较简单,但是在实现的时候,会出现很多细节问题。通过分析,该问题是子集生成算法的衍生版本。具体思路和代码实现如下所示:

import java.util.ArrayList;
import java.util.List;
/**
 * Created by hadoop on 18-2-18.
 * 晚上整理,整个问题可以看成是子集生成问题。将字符串中的字母变成对应的大小写形式,如果有n个字母就可以生成2^n种排列方式。
 * 在java中将小写字母转换成大写字母,主要是将字符的值减去32即可。
 * 处理思路:
 * 首先将字符中的所有字母变为小写,然后利用子集生成生成算法,当需要用到对应位置的元素时,将对应位置的字母切换成大写,然后存储到
 * list中即可。
 */
public class LetterCasePermutation2 {

    public static char convertChar(char c) {
        char a = ' ';
        if (Character.isLetter(c)) {
            if (Character.isLowerCase(c)) {
                 a = (char) (c - 32);
            }
        }
        else{
            return c;
        }
        return a;
    }

    public static String getsubset(int n,int t,String S){
        StringBuffer buffer = new StringBuffer(S);
        for (int i=0;i<n;i++){
            int res = t &(1<<i);
            if (res != 0){
                buffer.setCharAt(i,convertChar(S.charAt(i)));
            }
        }
        return buffer.toString();

    }

    public static List<String> letterCasePermutation(String S) {
        ArrayList<String> result = new ArrayList<>();
        int n = S.length();
        S = S.toLowerCase();

        for (int i=0;i<(1<<n);i++){
            if (!result.contains(getsubset(n,i,S)))
                result.add(getsubset(n,i,S));
        }

        return result;
    }

    public static void main(String[] args){
        String s = "aBc";
        ArrayList arrayList = (ArrayList) letterCasePermutation(s);
        for (int i=0;i<arrayList.size();i++){
            System.out.println(arrayList.get(i));
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,776评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 最近项目中用到了WKWebView,但是加载出来的网页内容比安卓的小一号,网上也没找到很好的解决办法,于是就直接用...
    神码阅读 1,511评论 0 1
  • 看了几个收集类的APP。有很多都是只做工具的,印象笔记、Marklist、抽屉、方片收集之类的. 做社区的,有代表...
    水滴慢慢阅读 1,914评论 0 0
  • 时间过的真快啊!转眼间小学就读完了!我也要长大了!但这速度快的让我受不了!目前为止,最让我后悔让我最后悔的一件事是...
    忠爽生活教育阅读 135评论 1 3