ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【hihocoder】字符消除

2019-04-05 22:51:29  阅读:280  来源: 互联网

标签:字符 return charAt int hihocoder sb false 消除 String


 

 

 

 

 

package Lv1;

import java.util.*;


public class 字符消除 {

    // f(s):返回消除s连续相同字符的个数
    private static int f(String s) {
        int ans = 0;

        StringBuffer sb = new StringBuffer(s);
        while (!different(sb.toString())) {//这个循环是如果还有连续的重复子串 那就接着消除
            for (int i = sb.length() - 1; i > 0; i--) {//这里需要倒着消除  和序号有关系  这里利用了可变数组的消除
                if (sb.charAt(i) == sb.charAt(i - 1)) {// 出现了重复子串
                    int j = i - 1;
                    
                    while (j > 0 && sb.charAt(j) == sb.charAt(i))//一旦i出现了重复子串 那么就是使用j去遍历全部的连续的字符
                        j--;
                    //所有分开了两个情况讨论
                    if (j == 0 && sb.charAt(0) == sb.charAt(i)) {// 直接去到0的话   这里有一个边界的问题  
                        sb = sb.delete(j, i + 1);
                        ans += (i + 1) - j;
                        break;
                    }
                    sb = sb.delete(j + 1, i + 1);
                    ans += (i + 1) - (j + 1);
                    i = j + 1;// 之后还有i--

                }
            }
        }

        return ans;
    }

    // different(s): 判断是否有连着的相同的
    private static boolean different(String s) {
        // 因为只有ABC 所以只要判断AA BB CC 这样的子串是否存在
        // 如果存在返回false
        if (s.contains("AA"))
            return false;
        if (s.contains("BB"))
            return false;
        if (s.contains("CC"))
            return false;

        return true;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=Integer.parseInt(sc.nextLine().trim());
        String[] ss=new String[n];
        for(int i=0;i<n;i++){
            ss[i]=sc.nextLine().trim();
        }
        
        for(int i=0;i<n;i++){
            
            int max=Integer.MIN_VALUE;
            for(int j=0;j<=ss[i].length();j++){//各个位置插入
                for(char k='A';k<='C';k++){
                    StringBuffer sb=new StringBuffer(ss[i]);
                    sb=sb.insert(j, k);
                    int t=f(sb.toString());
                    max=Math.max(max, t);
                    
                }
                    
            }
            
            System.out.println(max);
        }
        
        
    }
}

 

标签:字符,return,charAt,int,hihocoder,sb,false,消除,String
来源: https://www.cnblogs.com/Rowry/p/10660306.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有