942. 增减字符串匹配(java)

942. 增减字符串匹配

给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。

返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i = 0, …, N-1,都有:

如果 S[i] == “I”,那么 A[i] < A[i+1]
如果 S[i] == “D”,那么 A[i] > A[i+1]

示例 1:

输入:“IDID”
输出:[0,4,1,3,2]
示例 2:

输入:“III”
输出:[0,1,2,3]
示例 3:

输入:“DDI”
输出:[3,2,0,1]
快捷键目录标题文本样式列表链接代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图

解题思路:

这道题主要考察的是找规律,根据输出结果可以发现:依次遍历给定字符串,如果是“I”,则从最小值开始,每次遍历到“I”则依次加1;如果是“D”,则从最小值开始,每次遍历到“D”则依次减1。因为数组长度比字符串多1,最后别忘记把最后一个元素填充上。

class Solution {
    
    
    public int[] diStringMatch(String s) {
    
    
         int i=0;
         int N = S.length();
         int a[] = new int [N+1];
        for(int k=0;k<N;k++){
    
    
            if(s.charAt(k) == 'I'){
    
    
                a[k] = i;
                i++;
            }
            else{
    
    
                a[k] = N;
                N--;
            }
        }
        a[N] = i;//参与内部运算
        return a;
    }
}

附加:不同子串

一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串。
解题思路:
1.用substring方法提取子字符串
2.用set集合去重

import java.util.HashSet;
import java.util.Set;
//审题发现要求是不同的非空子串,则想到Set集合去重,
//String.substring()方法求子串(一切	为快速解题为前提)
//for循环每一种可能

public class butongzichuan {
    
    
	public static void main(String[] args) {
    
    
		String s ="0100110001010001";
		Set<String> set = new HashSet<String>();
		for (int i = 0; i < s.length(); i++) {
    
    
			for (int j = i+1; j <= s.length(); j++) {
    
    
				String a = s.substring(i,j);
				set.add(a);
			}
		}
		System.out.println(set.size());
	}

猜你喜欢

转载自blog.csdn.net/qq_45954445/article/details/108182917