hihocoder字符消除

Posted rowry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder字符消除相关的知识,希望对你有一定的参考价值。

 

 

 

 

 

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);
        }
        
        
    }
}

 

以上是关于hihocoder字符消除的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder 1039 字符串消除模拟

hihoCoder 1039:字符消除(字符串处理)

[HIHO1039]字符消除(字符串,枚举,模拟)

hihocoder第233周

覆盖javascript以消除闪烁

hihocoder 1014(字典树)